我有一个类似以下的DF:
ID hier
1 Z1
1 Z2
2 Z1
2 Z2
和所需的输出是DF,类似于下一个:
ID hier
1 Z1,Z2
2 Z1,Z2
我知道Fold和reduce的用法,但我不清楚如何在这种情况下使用它。
答案 0 :(得分:1)
Fold
和Reduce
是功能方法。使用DataFrames
提供了一个关系代数来表达您的变换。您应该考虑对问题使用collect_list
内置函数:
import org.apache.spark.sql.functions._
import spark.implicits._
val df = Seq(
(1,"Z1"),
(1,"Z2"),
(2,"Z1"),
(2,"Z2")
).toDF("ID", "hier")
df.groupBy($"ID").agg(collect_list($"hier").as("hier"))
.show(false)
+---+------------------+
|ID |hier |
+---+------------------+
|2 |[Z1, Z2] |
|1 |[Z1, Z2] |
+---+------------------+
如果您想要一个字符串,则可以改用此转换:
df.groupBy($"ID").agg(concat_ws(",",collect_list($"hier")).as("hier"))
+---+-----+
|ID |hier |
+---+-----+
|2 |Z1,Z2|
|1 |Z1,Z2|
+---+-----+