2016-08-03 22 views
0

Ich habe ein Dataframe df, das 13 durch Komma getrennte Werte enthält. Ich möchte in df2 einen Datenrahmen bekommen, der labeledPoint enthält. Erster Wert ist Label, zwölf weitere sind Features. Ich benutze eine Split-und Select-Methode, um String mit 13 Wert in ein Array von 13 Werten zu teilen. map-Methode erlaubt mir, LabeledPoint zu erstellen. Fehler kommen, wenn ich toDF() -Methode RDD zu DatenrahmenRDD von LabeledPoint in DataFrame konvertieren toDF() Fehler

df2 = df.select(split(df[0], ',')).map(lambda x: LabeledPoint(float(x[0]),x[-12:])).toDF() 

org.apache.spark.SparkException konvertieren: Job aufgrund Stufe Ausfall abgebrochen:

, wenn ich in der stackerror sehe ich finden: IndexError: Tupelindex außerhalb des Bereichs.

um Test zu tun, I ausgeführt:

display(df.select(split(df[0], ','))) 

i erhalten meine 13 Werte in einem Array für jede Zeile:

["2001.0","0.884123733793","0.610454259079","0.600498416968","0.474669212493","0.247232680947","0.357306088914","0.344136412234","0.339641227335","0.600858840135","0.425704689024","0.60491501652","0.419193351817"] 

eine Idee?

+0

Wie laden Sie die CSV in Dataframe? Meiner Meinung nach kann der Fehler in Split (df [0], ',') sein. Es scheint, dass Sie nur eine Spalte verwenden. –

+0

'x [-12:]' gab den Fehler. Vielleicht überprüfen Sie, ob Sie tatsächlich 13 Werte nach "Split" haben? – ShuaiYuan

+0

Ich bearbeite meinen Beitrag neu. Ich teste diese Befehlsanzeige (df.select (split (df [0], ','))) wie ich im Beitrag gesagt habe, ich erhalte richtig meine 13 Werte ... –

Antwort

1

Der Fehler kommt aus dem Index x [0] sollte durch x [0] [0] ersetzt werden. So:

df2 = df.select(split(df[0], ',')).map(lambda x: LabeledPoint(float(x[0][0]), x[0][-12:])).toDF()