假设我有以下DataFrame:
scala> val dataset = Seq((0, "hello"), (0, "world"), (0, "hello"), (1, "foo"), (1, "bar")).toDF("id", "text")
dataset: org.apache.spark.sql.DataFrame = [id: int, text: string]
scala> dataset.show()
+---+-----+
| id| text|
+---+-----+
| 0|hello|
| 0|world|
| 0|hello|
| 1| foo|
| 1| bar|
+---+-----+
如何为每个text
获取不同的id
?即,我想做类似的事情:
dataset.groupBy("id").agg(distinct('text))
我是否必须创建UserDefinedAggregateFunction
?我最终想要每个id
的列表。
答案 0 :(得分:4)
您可以使用collect_set
:
dataset.groupBy("id").agg(collect_set($"text")).show
+---+-----------------+
| id|collect_set(text)|
+---+-----------------+
| 1| [bar, foo]|
| 0| [world, hello]|
+---+-----------------+