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]|
+---+-----------------+