2016-11-01 9 views
1

SparkがファイルからDataFrameにソースデータを読み込むとき、データが単一ノード(ドライバ/マスターノード)のメモリに完全にロードされるか、計算に必要な最小限の並列サブセットワーカー/エグゼキュータノード上)?ParquetからのSpark DataFrameのロードを分散して並列化する方法を教えてください。

特に、Parquetを入力フォーマットとして使用し、Spark DataFrame APIを使用してロードする場合、Parquetファイルからの読み込みを並列化してエグゼキュータに延期し、スコープが制限されていることを確認するためには、問題のエグゼキュータ・ノードでの計算に必要な列

は(私は完全なデータセットをロードすることによって、いずれかのノード上の排気メモリを避けるために、スパークは、分散実行計画では、ソースデータのロードをスケジュールするために使用するメカニズムを理解するために探しています。)

答えて

1

限りスパーク操作を使用すると、すべてのデータ変換と集計はエグゼキュータでのみ実行されます。したがって、ドライバがデータをロードする必要はなく、その仕事は処理フローを管理することです。ドライバは、collect()first()show()toPandas()toLocalIterator()などの端末操作を使用する場合にのみデータを取得します。さらに、エグゼキュータはすべてのファイルの内容をメモリにロードするのではなく、(パーティションと呼ばれる)最も小さなポーズのチャンクを取得します。

Parquetなどの列ストア形式を使用する場合、実行計画に必要な列のみがロードされます。これはsparkのデフォルトの動作です。

編集:私はちょうど火花にバグがあるかもしれないことを見て、あなたがして、不要な列をロードすることができ、あなたのスキーマ内のネストした列を使用する場合は、以下を参照してくださいWhy does Apache Spark read unnecessary Parquet columns within nested structures?

関連する問題