私は、first()vs collect()操作のためにSparkによって作成されるジョブを理解しようとしています。first()操作のスパーク動作
myRDD = spark.sparkContext.parallelize(['A', 'B', 'C'])
def func(d):
return d + '-foo'
myRDD = myRDD.map(func)
マイRDDが16個のパーティションに分割され::私が呼び出した場合
print(myRDD.toDebugString())
(16) PythonRDD[24] at RDD at PythonRDD.scala:48 []
| ParallelCollectionRDD[23] at parallelize at PythonRDD.scala:475 []
:
myRDD.collect()
私が作成した16のタスクと1つの仕事を得る。コードが与えられ
私はこれがパーティションごとに1つのタスクだと仮定します。私が呼び出す場合
しかし、:
myRDD.first()
は、私が作成した1、4、および11のタスクと、3つのジョブを取得します。なぜ3つのジョブが作成されたのですか?
私は、Mesosによってプロビジョニングされた単一の16コアエグゼキュータでspark-2.0.1を実行しています。
スパークのバージョンとクラスタ設定についても触れてください。 – shanmuga
@shanmugaが更新されました。 – MarkNS
AFAIK collect()は実際にシャッフルを1つのパーティションにします。 first()が3つのパーティションにまたがって実行されている可能性があります。 *うずまき* – Kristian