以下程序在zip步骤中失败。
x = sc.parallelize([1, 2, 3, 1, 2, 3])
y = sc.parallelize([1, 2, 3])
z = x.distinct()
print x.zip(y).collect()
产生的错误取决于是否指定了多个分区。
我理解
两个RDD [必须]在每个分区中具有相同数量的分区和相同数量的元素。
解决此限制的最佳方法是什么?
我一直在使用以下代码执行操作,但我希望找到更有效的方法。
def safe_zip(left, right):
ix_left = left.zipWithIndex().map(lambda row: (row[1], row[0]))
ix_right = right.zipWithIndex().map(lambda row: (row[1], row[0]))
return ix_left.join(ix_right).sortByKey().values()
答案 0 :(得分:0)
我认为这可以通过在RDD上使用cartesian()完成。
import pyspark
x = sc.parallelize([1, 2, 3, 1, 2, 3])
y = sc.parallelize([1, 2, 3])
x.distinct().cartesian(y.distinct()).collect()