2016-07-18 12 views
0

Ich habe eine RDD, die wie folgt aussieht. Ich versuche, es in einen Datenrahmen von ['TS', 'val', 'Key'] in Python (pyspark) zu konvertieren. Jede Hilfe wird geschätzt, da ich ziemlich neu bin.Konvertieren einer RDD mit einem Array in einen Datenrahmen

root 
|-- val: array (nullable = true) 
| |-- element: double (containsNull = true) 
|-- key: long (nullable = true) 

+--------------------+---+ 
|     val|key| 
+--------------------+---+ 
|[1.466095512E9, 6...| 0| 
|[1.466097304E9, 6...| 1| 
|[1.466099099E9, 6...| 2| 
|[1.466100895E9, 7...| 3| 
|[1.466102698E9, 7...| 4| 

habe ich versucht, dies aber ich habe einen Fehler auf der .toDF Linie, ohne Erklärung.

FN2 = FN.map(lambda x, y: (x[0], x[1], y)) 
Square = FN2.toDF(['TS','val','key']) #Converts to dataframe 
Square.show() 
+0

Wenn Ihr RDD wird aus einer CSV-Datei zum Beispiel gerichtet erstellt, können Sie mit [funken csv] (https://github.com/databricks/spark-csv) um es direkt in einen Datenrahmen zu ändern. –

+0

Was ist 'TS'? Es ist nicht in Ihrer Probe. – ShuaiYuan

+0

TS ist UnixTime. Es ist die erste Spalte, val ist die zweite Spalte, Schlüssel ist die dritte Spalte. Derzeit werden TS und val als Array gespeichert –

Antwort

0

Ihre Lambda-Funktion einen Fehler enthält, versuchen Sie mit

FN2 = FN.map(lambda (x, y): (x[0], x[1], y)) 

Im Allgemeinen wird jede Zeile übergeben als ein einziges Argument abzubilden, so dass der sicherste Weg, some zur Karte ist mit wie

FN2 = FN.map(lambda row: (row[0], row[1])) 
0

Ich fand es heraus. Es war ein Array innerhalb eines Arrays

FN2 = FN.map(lambda x: (x[0][0], x[0][1], x[1])) 
Square = FN2.toDF(['TS','val','key']) 
Square.show() 
Verwandte Themen