我有一个 Spark DataFrame,如下所示:
| id | value | bin |
|----+-------+-----|
| 1 | 3.4 | 2 |
| 2 | 2.6 | 1 |
| 3 | 1.8 | 1 |
| 4 | 9.6 | 2 |
我有一个函数f
它接受一个值数组并返回一个数字。我想向上面的数据框添加一列,其中每行中新列的值是 f
的值对于所有 value
具有相同 bin
的条目条目,即:
| id | value | bin | f_value |
|----+-------+-----+---------------|
| 1 | 3.4 | 2 | f([3.4, 9.6]) |
| 2 | 2.6 | 1 | f([2.6, 1.8]) |
| 3 | 1.8 | 1 | f([2.6, 1.8]) |
| 4 | 9.6 | 2 | f([3.4, 9.6]) |
因为我需要聚合所有 value
每bin
,我无法使用 withColumn
函数来添加这个新列。在用户定义的聚合函数进入 Spark 之前,最好的方法是什么?
最佳答案
下面的代码未经测试,只是一个想法。
在 Hive 中,可以使用 collect_list 来完成此操作功能。
val newDF = sqlContext.sql(
"select bin, collect_list() from aboveDF group by bin")
下一步加入
bin上的aboveDF
和newDF
。
这是您要找的吗?
关于apache-spark - 将聚合列添加到 Spark DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30510534/