2016-06-26 10 views

答えて

4

マルチスレッドのPythonの問題は、Apache Sparkの内部から分離されています。 Sparkの並列処理はJVM内部で処理されます。

enter image description here

その理由はPythonのドライバプログラムでは、SparkContextは、JVMを起動しJavaSparkContextを作成するためにPy4Jを使用していることです。

Py4Jは、PythonとJavaのSparkContextオブジェクト間のローカル通信用のドライバでのみ使用されます。大規模なデータ転送は、異なるメカニズムを介して実行されます。

PythonのRDD変換は、JavaのPythonRDDオブジェクトの変換にマップされます。リモートワーカーマシンでは、PythonRDDオブジェクトはPythonサブプロセスを起動し、パイプを使用してそれらと通信し、ユーザーのコードと処理されるデータを送信します。

PS:実際にあなたの質問に完全に回答するかどうかはわかりません。

+1

ここでの主なポイントは、PySparkがマルチスレッドを使用していないことだと思うので、GILは単に問題ではありません。 – zero323

+0

@ zero323あなたのコメントを詳しく説明できますか? –

+0

詳細はあまりありません。テストを除いて、PySparkがスレッドを使用して外部プロセスを開始するような二次的なタスクを実行する場所はほんのわずかです。他のすべてのものは単なる古いシングルスレッド処理です。 – zero323

関連する問題