2017-04-12 1 views
0

Angenommen ich folgende Datenrahmen haben:Wie erhalten Sie alle eindeutigen Elemente pro Schlüssel in 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| 
+---+-----+ 

Wie erhalte ich den deutlichen text für jeden id? Das heißt, ich möchte, wie etwas tun:

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

Habe ich eine UserDefinedAggregateFunction zu schaffen haben? Ich möchte schließlich eine Liste für jede id.

Antwort

4

können Sie collect_set verwenden:

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