在 pyspark RDD 上执行 map/reduce 时出现一些错误

Getting some error while performing map/reduce on pyspark RDD

我只是想学习 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: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.runJob. : org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 162.0 failed 1 times, most recent failure: Lost task 0.0 in stage 162.0 (TID 3850, localhost, executor driver): org.apache.spark.api.python.PythonException: Traceback (most recent call last):

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

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

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