将 LabeledPoint 的 RDD 转换为 DataFrame toDF() 错误
Convert RDD of LabeledPoint to DataFrame toDF() Error
我有一个数据框 df,其中包含 13 个以逗号分隔的值。我想在 df2 中获取一个包含 labeledPoint 的数据帧。第一个值是标签,其他十二个是特征。我使用 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:作业因阶段失败而中止:
当我查看堆栈错误时,我发现:
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"]
有什么想法吗?
来自索引x[0] 的错误应替换为x[0][0]。
所以:
df2 = df.select(split(df[0], ',')).map(lambda x: LabeledPoint(float(x[0][0]), x[0][-12:])).toDF()
我有一个数据框 df,其中包含 13 个以逗号分隔的值。我想在 df2 中获取一个包含 labeledPoint 的数据帧。第一个值是标签,其他十二个是特征。我使用 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:作业因阶段失败而中止:
当我查看堆栈错误时,我发现: 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"]
有什么想法吗?
来自索引x[0] 的错误应替换为x[0][0]。 所以:
df2 = df.select(split(df[0], ',')).map(lambda x: LabeledPoint(float(x[0][0]), x[0][-12:])).toDF()