mapPartitionsWithIndex - 如何组合输出



我试图理解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"].

最新更新