首页 > 解决方案 > 在 pyspark RDD 上执行 map/reduce 时出现一些错误

问题描述

我只是想学习 PySpark,但对以下两个 RDD 之间的区别感到困惑,我知道一个是类型集,一个是列表,但两者都是 RDD

rdd = sc.parallelize([('a', 1), ('b', 1), ('a', 3)])
type(rdd)

rdd = sc.parallelize(['a, 1', 'b, 1', 'a, 3'])
type(rdd)

处理map和reduce函数的代码:

priceMap= s.map(lambda o: (o.split(",")[0], float(o.split(",")[1])))
priceMap.reduceByKey(add).take(10)

我可以轻松地对第二个 rdd 数据执行 map/reduce 功能,但是当我尝试执行 map 或 reduce 时出现以下错误:那么我们如何将第一个 rdd 转换为第二个 rdd 数据,或者是否有任何方法要解决以下错误,请帮助。谢谢

Py4JJavaError:调用 z:org.apache.spark.api.python.PythonRDD.runJob 时出错。:org.apache.spark.SparkException:作业因阶段失败而中止:阶段 162.0 中的任务 0 失败 1 次,最近失败:阶段 162.0 中丢失任务 0.0(TID 3850,本地主机,执行程序驱动程序):org.apache.spark .api.python.PythonException:回溯(最近一次调用最后一次):

标签: pythonapache-sparkpysparkrdd

解决方案


对于第一个 rdd,可以替换 map 函数:

rdd = sc.parallelize([('a', 1), ('b', 1), ('a', 3)])
rdd.map(lambda o: (o[0], float(o[1]))).reduceByKey(add).collect()

那是因为split仅适用于字符串而不适用于元组。


推荐阅读