【问题标题】:Getting some error while performing map/reduce on pyspark RDD在 pyspark RDD 上执行 map/reduce 时出现一些错误
【发布时间】:2021-02-24 04:28:24
【问题描述】:

我只是想学习 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 次,最近一次失败:丢失任务 0.0 在阶段 162.0 (TID 3850, localhost, executor driver): org.apache.spark.api.python.PythonException: Traceback (最近 最后调用):

【问题讨论】:

  • 回溯表明存在 python 异常。请显示您的 map/reduce 代码 - 错误可能源于那里
  • @mck 是的,我更新了 map 和 reduce 的两行代码,请你帮帮我。谢谢
  • s 和 add 是未定义的变量
  • 把 rdd name 代替 s 所以会是 rdd.map(.... add 是函数,可以导入,下面是库,请导入..... . from operator import add

标签: python apache-spark pyspark rdd


【解决方案1】:

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

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

这是因为split 仅适用于字符串,但不适用于元组。

【讨论】:

  • 我试过了,对我不起作用,我会试试你的代码,看看是否有效
猜你喜欢
  • 2018-01-18
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
相关资源
最近更新 更多