Apache spark 无法反序列化批次中具有不同项数的PairRDD

Apache spark 无法反序列化批次中具有不同项数的PairRDD,apache-spark,pyspark,jupyter-notebook,Apache Spark,Pyspark,Jupyter Notebook,我是pyspark的新手,一般来说已经有几年没有与spark合作了。有人能解释一下这里发生了什么吗: import random import pyspark sc.stop() sc = pyspark.SparkContext('local[*]') xx = sc.parallelize(range(100)) yy = sc.parallelize(list(map(lambda x : x *2, range(100)))) print(xx.count()) print(yy.

我是
pyspark
的新手,一般来说已经有几年没有与
spark
合作了。有人能解释一下这里发生了什么吗:

import random
import pyspark

sc.stop()
sc = pyspark.SparkContext('local[*]')


xx = sc.parallelize(range(100))
yy = sc.parallelize(list(map(lambda x : x *2, range(100))))
print(xx.count())
print(yy.count())
zipped = xx.zip(yy)
print(zipped.collect())
输出:

ValueError                             Traceback (most recent call last)
<ipython-input-57-a532cb7061c7> in <module>
     11 print(yy.count())
     12 zipped = xx.zip(yy)
---> 13 print(zipped.collect())
...  
...
ValueError: Can not deserialize PairRDD with different number of items in batches: (9, 8)
ValueError回溯(最近一次调用)
在里面
11打印(yy.count())
12压缩=xx.zip(yy)
--->13打印(zipped.collect())
...  
...
ValueError:无法反序列化批次中具有不同项数的PairRDD:(9,8)

这意味着您必须拥有相同的分区器,每个分区具有相同的分区数和相同的键值数,否则压缩将无法工作。例如,9.8

有关更多信息:


rdd.glom().collect()
显示并非所有xx和yy rdd都符合每个分区相同数量的元素。这就是问题所在。

这个答案和错误消息本身一样有帮助。你能提供一个代码片段吗?很确定答案是正确的。你反驳我了吗?不,对不起,@thebluephantom,我周末在那个课程上学习。我会在接近周末的时候检查它,并希望确认一切都是正确的。成功如果我只是更改xx和yy的定义,比如:xx=sc.parallelize(范围(100))。重新分区(5)yy=sc.parallelize(列表(映射(lambda x:x*2,范围(100))))。重新分区(5),它没有帮助,我仍然得到:Py4JJavaError:调用z:org.apache.spark.api.PythonRDD.collectAndServe时出错:org.apache.SparkException:作业因阶段失败而中止:阶段6.0中的任务1失败1次,最近的失败:阶段6.0中的任务1.0丢失(TID 35,192.168.0.171,executor driver):org.apache.spark.SparkException:只能压缩每个分区中元素数相同的RDD