Pyspark rdd.zip ValueError:无法反序列化具有不同成对项目数的 RDD
Posted
技术标签:
【中文标题】Pyspark rdd.zip ValueError:无法反序列化具有不同成对项目数的 RDD【英文标题】:Pyspark rdd.zip ValueError: Can not deserialize RDD with different number of items in pair 【发布时间】:2016-10-26 04:05:27 【问题描述】:我正在使用 spark 1.6.0,并且我有一个 pyspark.mllib.tree.RandomForestModel 用于预测任务。我的data_rdd格式如下:
[LabeledPoint(id1,feature),
LabeledPoint(id2,feature),
...]
我的代码是
rfmodel = RandomForestModel.load(sc,modelpath)
我想要的是获取 id 和预测的标签。所以我做了以下,
predictions = rfmodel.predict(data_rdd.map(lambda x:x.features))
idsAndPredictions = data_rdd.map(lambda lp: lp.label).zip(predictions)
我运行这段代码,它给出了一个错误
ValueError: Can not deserialize RDD with different number of items in pair: (91, 90)
由于 zip 功能而发生错误。似乎人们因为没有相同长度的 data_rdd 和预测而得到这个错误。但就我而言,data_rdd 和 predictions 显然具有相同的长度。
我的问题是如何让它工作,如果它是一个火花错误,还有其他方法可以达到相同的结果吗?
【问题讨论】:
能否请您提供预测和 data_rdd.map(lambda lp: lp.label) 的长度,因为从代码看来它们的长度不同 @ShivanshSrivastava 感谢您的回复。就我而言,预测来自 data_rdd 的逐行映射操作。所以我不认为它们的长度不同。我的数据由数亿个样本组成,因此可能需要一段时间才能分别计算它们。当然,我会考虑这种可能性并稍后提供计数。再次感谢您的建议。 看看link 【参考方案1】:奇怪的是,我通过将分区数量从默认的大约 500000 个减少到 500 个来使其工作。希望有人能启发我。
【讨论】:
以上是关于Pyspark rdd.zip ValueError:无法反序列化具有不同成对项目数的 RDD的主要内容,如果未能解决你的问题,请参考以下文章
PYSPARK:如何将带有多个 case 语句的 SQL 查询转换为 Pyspark/Pyspark-SQL?
pyspark.sql.functions.col 和 pyspark.sql.functions.lit 之间的 PySpark 区别