2016-08-03 67 views
0

我有一個dataframe df,其中包含13個以逗號分隔的值。我想在df2中獲得一個包含標記點的數據框。價值是標籤,其他十二個是特徵。我使用拆分和選擇方法將具有13值的字符串劃分爲13個值的數組。地圖方法允許我創建標記點。錯誤當我使用toDF()方法來RDD轉換成數據幀將LabeledPoint的RDD轉換爲DataFrame到DF()錯誤

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

org.apache.spark.SparkException:作業已中止由於舞臺故障:

,當我看在stackerror我發現: IndexError:元組索引超出範圍。

爲了做測試,我執行:

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

我獲得我的13個值中的陣列的每一行:

["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"] 

任何主意?

+0

如何將CSV加載到數據框中?在我看來,錯誤可能在split(df [0],',')。看來你只使用一列。 –

+0

'x [-12:]'給出了錯誤。 ''split''後可能檢查你實際上有13個值? – ShuaiYuan

+0

我重新編輯我的帖子。我測試這個命令顯示(df.select(split(df [0],',')))就像我在帖子中說的,我正確地獲得了我的13個值... –

回答

1

錯誤來自索引x [0]應該被x [0] [0]替換。 所以:

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