将聚合列添加到 Spark DataFrame

Add Aggregate Column to Spark DataFrame

我有一个如下所示的 Spark DataFrame:

| id | value | bin |
|----+-------+-----|
|  1 |   3.4 |   2 |
|  2 |   2.6 |   1 |
|  3 |   1.8 |   1 |
|  4 |   9.6 |   2 |

我有一个函数 f 接受一个值数组和 returns 一个数字。我想在上面的数据框中添加一列,其中每行中新列的值是具有相同 bin 条目的所有 value 条目的 f 的值,即:

| 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]) |

因为我需要聚合每个 bin 的所有 value,我不能使用 withColumn 函数来添加这个新列。在用户定义的聚合函数进入 Spark 之前,执行此操作的最佳方法是什么?

以下代码未经测试,只是一个想法。

在 Hive 中,可以使用 collect_list 函数这样做。

val newDF = sqlContext.sql(
    "select bin, collect_list() from aboveDF group by bin")

下一个 join aboveDFnewDF 在 bin 上。

这是您要找的吗?