Scala 如何在DataFrame中获得每个键的所有不同元素?

Scala 如何在DataFrame中获得每个键的所有不同元素?,scala,apache-spark,Scala,Apache Spark,假设我有以下数据帧: 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| +---+-----

假设我有以下数据帧:

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|
+---+-----+
如何为每个
id
获取不同的
文本?也就是说,我想做如下事情:

dataset.groupBy("id").agg(distinct('text))

我是否必须创建一个
用户定义的聚合函数
?我最终希望为您可以使用的每个
id
提供一个列表:

dataset.groupBy("id").agg(collect_set($"text")).show
+---+-----------------+
| id|collect_set(text)|
+---+-----------------+
|  1|       [bar, foo]|
|  0|   [world, hello]|
+---+-----------------+

您可以使用
collect\u set

dataset.groupBy("id").agg(collect_set($"text")).show
+---+-----------------+
| id|collect_set(text)|
+---+-----------------+
|  1|       [bar, foo]|
|  0|   [world, hello]|
+---+-----------------+