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

时间:2017-04-12 23:02:34

标签: scala apache-spark

假设我有以下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的列表。

1 个答案:

答案 0 :(得分:4)

您可以使用collect_set

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