我试图理解Spark中的mapPartitionsWithIndex
。我发现以下两个示例产生的输出截然不同:
parallel = sc.parallelize(range(1,10),2)
def show(index, iterator): yield 'index: '+str(index)+" values: "+
str(list(iterator))
parallel.mapPartitionsWithIndex(show).collect()
parallel = sc.parallelize(range(1,10),2)
def show(index, iterator): return 'index: '+str(index)+" values: "+
str(list(iterator))
parallel.mapPartitionsWithIndex(show).collect()
正如突出显示的那样,区别在于 show 函数返回的是生成器还是迭代器。
我想我不明白mapPartitionsWithIndex
如何组合各个分区的结果。
你能向我解释一下这种行为是如何发生的吗?
mapPartitionsWithIndex(self, f, preservesPartitioning=False)
参数:f
必须返回可迭代对象。
通常,如果没有返回可迭代对象,则应引发错误。
但是在您的情况下2,return String
通过源代码(pyspark/serializers.py行,第 266 行)中的iterator = iter(iterator)
错误地变成了return list of letter
。
如果您坚持使用return
,请return ["I'm String"]
.