2016-11-05 5 views
0

Ich habe ein Problem bei der Umstrukturierung von Daten mit Spark. Die ursprünglichen Daten sieht wie folgt aus:Spark Pivot String in PySpark

df = sqlContext.createDataFrame([ 
    ("ID_1", "VAR_1", "Butter"), 
    ("ID_1", "VAR_2", "Toast"), 
    ("ID_1", "VAR_3", "Ham"), 
    ("ID_2", "VAR_1", "Jam"), 
    ("ID_2", "VAR_2", "Toast"), 
    ("ID_2", "VAR_3", "Egg"), 
], ["ID", "VAR", "VAL"]) 

>>> df.show() 
+----+-----+------+ 
| ID| VAR| VAL| 
+----+-----+------+ 
|ID_1|VAR_1|Butter| 
|ID_1|VAR_2| Toast| 
|ID_1|VAR_3| Ham| 
|ID_2|VAR_1| Jam| 
|ID_2|VAR_2| Toast| 
|ID_2|VAR_3| Egg| 
+----+-----+------+ 

Dies ist die Struktur I zu erreichen versuchen:

+----+------+-----+-----+ 
| ID| VAR_1|VAR_2|VAR_3| 
+----+------+-----+-----+ 
|ID_1|Butter|Toast| Ham| 
|ID_2| Jam|Toast| Egg| 
+----+------+-----+-----+ 

Meine Idee zu verwenden war:

df.groupBy("ID").pivot("VAR").show() 

Aber ich bekomme die folgende Fehlermeldung:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
AttributeError: 'GroupedData' object has no attribute 'show' 

Irgendwelche Vorschläge! Vielen Dank!

Antwort

1

Sie müssen eine Aggregation nach pivot() hinzufügen. Wenn Sie sicher sind, gibt es nur eine „VAL“ für jede („ID“, „VAR“) -Paar ist, können Sie zunächst():

from pyspark.sql import functions as f 

result = df.groupBy("ID").pivot("VAR").agg(f.first("VAL")) 
result.show() 

+----+------+-----+-----+ 
| ID| VAR_1|VAR_2|VAR_3| 
+----+------+-----+-----+ 
|ID_1|Butter|Toast| Ham| 
|ID_2| Jam|Toast| Egg| 
+----+------+-----+-----+ 
+0

Dies kann eine gültige Antwort, warum war es nach unten gestimmt ? – eliasah

Verwandte Themen