将聚合列添加到 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
aboveDF
和 newDF
在 bin 上。
这是您要找的吗?
我有一个如下所示的 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
aboveDF
和 newDF
在 bin 上。
这是您要找的吗?