将LabeledPoint的RDD转换为DataFrame toDF()错误

时间:2016-08-03 03:35:04

标签: python apache-spark pyspark rdd spark-dataframe

我有一个数据帧df,其中包含用逗号分隔的13个值。我想在df2中输入一个包含labeledPoint的dataFrame。 firt值是标签,其他十二个是功能。我使用split和select方法将带有13值的字符串分成13个值的数组。 map方法允许我创建labeledPoint。当我使用toDF()方法将RDD转换为DataFrame

时出现错误
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"]

任何想法?

1 个答案:

答案 0 :(得分:1)

错误来自索引x [0]应该被x [0] [0]替换。 所以:

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