2017-08-08 4 views
0

Ich habe eine Liste der Kunden, die Artikel gekauft:PySpark Datenrahmen: Longformat zu Großformat

rdd = sc.parallelize([('A','Item1'), ('A','Item3'), ('B','Item1'), ('B','Item2')]) 
df=rdd.toDF(['Person','Item']) 
df.show() 
+------+-----+ 
|Person| Item| 
+------+-----+ 
|  A|Item1| 
|  A|Item3| 
|  B|Item1| 
|  B|Item2| 
+------+-----+ 

Nun möchte Ich mag diese pyspark mit zu breitem Format ändern. Das Ergebnis sollte wie folgt aussehen:

+------+-----+-----+-----+ 
|Person|Item1|Item2|Item3| 
+------+-----+-----+-----+ 
|  A| 1 | 0 | 0 | 
|  A| 0 | 0 | 1 | 
|  B| 1 | 0 | 0 | 
|  B| 0 | 1 | 0 | 
+------+-----+-----+-----+ 

Irgendeine Idee, wie man das macht?

Mit freundlichen Grüßen, Felix

Antwort

0

Ich fand die Lösung:

>>> df.crosstab('Person', 'Item').show() 
+-----------+-----+-----+-----+ 
|Person_Item|Item1|Item2|Item3| 
+-----------+-----+-----+-----+ 
|   A| 1| 0| 1| 
|   B| 1| 1| 0| 
+-----------+-----+-----+-----+