【发布时间】:2018-02-10 21:58:16
【问题描述】:
UDAF 可以返回复杂类型吗?比如说一个 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])
我正在寻找一个 UDAF 解决方案,以便可以在我的原始 sql 查询中使用它。
【问题讨论】:
-
您根本不能在
DataFrame中拥有Map(key -> 50, value -> [foo, car, bus])。所有值必须属于同一类型。如果有的话,它应该是结构。 -
这里不是所有的值都相同吗?哪个是数组?
-
显然
array<string>(value) 与key(数字) 的类型不同。 -
键和值必须是同一类型?我不知道。我认为所有的键都应该是相同的类型,比如 type1,所有的值都应该是相同的类型,比如 type2..如果你是对的,下面的解决方案为什么能够做到?
-
没有。答案中的表示是
Map(50 -> [foo, car, bus])而不是Map(key -> 50, value -> [foo, car, bus])。
标签: apache-spark