2017-12-29 11 views
0

Ich habe folgenden Datenrahmen in Spark-2.2 und Scala 2.11.8:Wie werden Zeileninformationen in Spalten umgewandelt?

+--------+---------+-------+-------+----+-------+ 
|event_id|person_id|channel| group|num1| num2| 
+--------+---------+-------+-------+----+-------+ 
|  560|  9410| web|  G1| 0|  5| 
|  290|  1430| web|  G1| 0|  3| 
|  470|  1370| web|  G2| 0|  18| 
|  290|  1430| web|  G2| 0|  5| 
|  290|  1430| mob|  G2| 1|  2| 
+--------+---------+-------+-------+----+-------+ 

Hier der äquivalente Datenrahmen in Scala ist: G1 und G2:

df = sqlCtx.createDataFrame(
    [(560,9410,"web","G1",0,5), 
    (290,1430,"web","G1",0,3), 
    (470,1370,"web","G2",0,18), 
    (290,1430,"web","G2",0,5), 
    (290,1430,"mob","G2",1,2)], 
    ["event_id","person_id","channel","group","num1","num2"] 
) 

Die Säule group nur zwei Werte haben kann . Ich brauche diese Werte der Spalte group in neue Spalten zu transformieren, wie folgt:

+--------+---------+-------+--------+-------+--------+-------+ 
|event_id|person_id|channel| num1_G1|num2_G1| num1_G2|num2_G2| 
+--------+---------+-------+--------+-------+--------+-------+ 
|  560|  9410| web|  0|  5|  0|  0| 
|  290|  1430| web|  0|  3|  0|  0| 
|  470|  1370| web|  0|  0|  0|  18| 
|  290|  1430| web|  0|  0|  0|  5| 
|  290|  1430| mob|  0|  0|  1|  2| 
+--------+---------+-------+--------+-------+--------+-------+ 

Wie kann ich es tun?

+0

Mögliche Duplikat von [ Umformen/Drehen von Daten in Spark RDD und/oder Spark DataFrames] (https://stackoverflow.com/questions/30260015/reshaping-pivoting-data-in-spark-rdd-and-o-spark-dataframes) –

Antwort

3

AFAIK (zumindest ich nicht einen Weg führen PIVOT ohne Aggregation finden konnten) wir Aggregationsfunktion verwenden müssen, wenn sie in Funken

Scala Version Schwenk tun:

scala> df.groupBy("event_id","person_id","channel") 
     .pivot("group") 
     .agg(max("num1") as "num1", max("num2") as "num2") 
     .na.fill(0) 
     .show 
+--------+---------+-------+-------+-------+-------+-------+ 
|event_id|person_id|channel|G1_num1|G1_num2|G2_num1|G2_num2| 
+--------+---------+-------+-------+-------+-------+-------+ 
|  560|  9410| web|  0|  5|  0|  0| 
|  290|  1430| web|  0|  3|  0|  5| 
|  470|  1370| web|  0|  0|  0|  18| 
|  290|  1430| mob|  0|  0|  1|  2| 
+--------+---------+-------+-------+-------+-------+-------+ 
Verwandte Themen