Zusammenfassen mehrerer Spalten mit benutzerdefinierten Funktionen in Spark

9

Ich habe mich gefragt, ob es eine Möglichkeit gibt, eine benutzerdefinierte Aggregationsfunktion für Spark-Dataframes über mehrere Spalten hinweg anzugeben.

Ich habe eine solche Tabelle vom Typ (Name, Artikel, Preis):

%Vor%

zu:

Ich möchte den Artikel und seine Kosten für jede Person in einer Liste wie dieser zusammenfassen:

%Vor%

Ist dies in Datenrahmen möglich? Ich habe kürzlich von collect_list erfahren, aber es scheint nur für eine Spalte zu funktionieren.

    
anthonybell 09.06.2016, 23:38
quelle

3 Antworten

17

Der einfachste Weg, dies als DataFrame zu tun, besteht darin, zunächst zwei Listen zu sammeln und dann UDF bis zip die beiden Listen zusammen zu verwenden. Etwas wie:

%Vor%     
David Griffin 10.06.2016, 11:37
quelle
17

Verwenden Sie die Funktion struct , um die Spalten vor dem Sammeln als Liste zu gruppieren:

%Vor%

Ausgaben:

%Vor%     
Daniel Siegmann 10.03.2017 19:50
quelle
2

Hier ist eine Option, indem Sie den Datenrahmen in eine RDD von Map konvertieren und dann ein groupByKey aufrufen. Das Ergebnis wäre eine Liste von Schlüssel-Wert-Paaren, wobei Wert eine Liste von Tupeln ist.

%Vor%     
Psidom 10.06.2016 02:20
quelle