2016-08-03 66 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() 
相关问题