联非新议程的返回复杂类型可以吗?比如,使用键作为整数的Map和字符串数组的值?
例如,假设我有以下输入数据
id | name | amount
-------------------------
1 | foo | 10
2 | bar | 15
1 | car | 20
1 | bus | 20我的目标/输出数据帧是
id | my_sum_along_with_names
-------------------------------------------------------------
1 | Map(key -> 50, value -> [foo, car, bus])
2 | Map(key -> 15, value -> [bar])我正在寻找一个联非新议程解决方案,以便我可以使用它在我的原始sql查询。
发布于 2018-02-10 13:58:16
对于您所拥有的需求,不需要UDAF。它只需使用groupBy、agg、sum和collect_list内置函数,最后使用map内置函数即可实现。
import org.apache.spark.sql.functions._
df.groupBy("id").agg(sum("amount").as("key"), collect_list("name").as("value"))
.select(col("id"), map(col("key"), col("value")).as("my_sum_along_with_names"))
.show(false)这将导致
+---+-------------------------------------------+
|id |my_sum_along_with_names |
+---+-------------------------------------------+
|1 |Map(50.0 -> WrappedArray( foo, car, bus))|
|2 |Map(15.0 -> WrappedArray( bar)) |
+---+-------------------------------------------+https://stackoverflow.com/questions/48721303
复制相似问题