我在使用zip时遇到了一些奇怪的行为;我基本上试图获得一个键值对的RDD,其中值只是一个索引,例如我初始化了一个rdd' f':
f = sc.parallelize(tokenizer('a fox jumped over the rabbit')).flatMap(lambda x: ngrams(x))
f.count()
52
然后执行:
ind = sc.parallelize(range(f.count()))
ind.count()
52
但
f_ind = f.zip(ind)
f_ind.count()
48
我不明白为什么有些元素会丢失?
答案 0 :(得分:1)
问题是SparkRDD
zip
操作要求两个RDD具有相同数量的元素和每个分区具有相同数量的元素 。最后一个要求是我上面的案例中违反的内容。似乎没有解决这个问题(但请参见例如http://www.adamcrume.com/blog/archive/2014/02/19/fixing-sparks-rdd-zip)。