我正在写一个函数
- 它将 RDD 作为输入
- 分割逗号分隔值
- 然后将每一行转换为标记点对象
最终以数据帧的形式获取输出
code: def parse_points(raw_rdd): cleaned_rdd = raw_rdd.map(lambda line: line.split(",")) new_df = cleaned_rdd.map(lambda line:LabeledPoint(line[0],[line[1:]])).toDF() return new_df output = parse_points(input_rdd)
到目前为止,如果我运行代码,没有错误,它工作正常。
但是在添加该行时,
output.take(5)
我收到错误:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 129.0 failed 1 times, most recent failure: Lost task 0.0 in s stage 129.0 (TID 152, localhost): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
Py4JJavaError Traceback (most recent call last)
<ipython-input-100-a68c448b64b0> in <module>()
20
21 output = parse_points(raw_rdd)
---> 22 print output.show()
请告诉我错误是什么。
最佳答案
在执行操作之前没有错误的原因:
output.take(5)
这是由于 Spark 的本质,它是惰性的。 即,在执行操作“take(5)”之前,spark 中不会执行任何操作
您的代码中有一些问题,我认为您由于 [line[1:]] 中额外的“[”和“]”而失败
所以你需要删除[line[1:]]中多余的“[”和“]”(只保留line[1:])
您可能需要解决的另一个问题是缺乏数据框架构。
即将“toDF()”替换为“toDF([“features”,“label”])” 这将为数据框提供一个架构。
关于python - 标记点对象 pyspark 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38887157/