2016-10-03 4 views
0

I Spark-Dataframes bin mit und haben Datenrahmen df ähnlich wie diese:Spark-Datenrahmen: Wie sowohl numerische und Nenn Spalten aggregieren

id: String | amount: Double | donor: String 
-------------------------------------------- 
1   | 50    | Mary 
2   |100    | Michael 
1   | 60    | Minnie 
1   | 20    | Mark 
2   | 55    | Mony 

ich meine Datenrahmen in einem Rutsch aggregieren möchten, und bekommen diese Ausgabe:

id: String | amount: Double | donor: Seq[String] 
-------------------------------------------- 
1   |130    | {Mary,Minnie,Mark} 
2   |155    | {Michael, Mony} 

Deshalb möchte ich etwas tun:

df.groupyBy("id").agg(sum("amount"),_?Seq?_("donor"))

Aggregieren der Summe der Zahlen ist einfach, aber ich finde keine Möglichkeit, den Textinhalt als eine Sequenz oder Array (oder einen ähnlichen Typ, der Iterable ist) zu aggregieren. Wie kann ich das in scala/funken machen?

EDIT:

Ich suche für einige Funken Datenrahmen oder RDD basierte Funktion, um die Sammlung von Strings zu tun. Funktionen wie die unten genannten collect_set sind Hive-basiert und ich brauche spezifische Abhängigkeiten dafür. Aber ich verwende Hive überhaupt nicht in meinem Projekt.

Antwort

2

Versuchen:

df.groupyBy("id").agg(sum("amount"), collect_list("donor")) 

oder

df.groupyBy("id").agg(sum("amount"), collect_set("donor")) 
+0

, der wie ein Charme, aber in welcher Klasse hast du 'collect_set' \' collect_list' finden? Ich kann diese in der API nicht finden. Gibt es außerdem eine Möglichkeit, sicherzustellen, dass die Sammlung nur bestimmte Werte hat? – Mnemosyne

+0

Ich fand es und collect_list ist eine Hive-Funktion. Gibt es nicht etwas Eigenes, um zu funken, weil ich Hive nicht benutze? – Mnemosyne

Verwandte Themen