2017-11-24 13 views
1

SparkのmapPartitionsWithIndexを理解しようとしています。強調表示され、差がショー機能発生器またはイテレータを返すかどうかにあるよう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() 

:私は、以下の2つの例は、非常に異なる出力を生成することを見出しました。

私はmapPartitionsWithIndexがどのように個々のパーティションからの結果を組み合わせるのか分かりません。

この現象がどのように発生するか教えてください。

答えて

1
mapPartitionsWithIndex(self, f, preservesPartitioning=False) 

パラメータ:f反復可能オブジェクトを返す必要があります。

一般に、反復可能オブジェクトが返されない場合は、エラーが発生するはずです。

return Stringは、間違ってiterator = iter(iterator)のソースコード(pyspark/serializers.py、行266)でreturn list of letterになります。

returnを使用したい場合は、return ["I'm String"]としてください。

関連する問題