0

Spark SQL を使用した Spark での変換とアクションの動作を評価するために、いくつかのテストを実行しています。テストでは、まず、2 つの変換と 1 つのアクションを含む単純なデータフローを考えます。

LOAD (result: df_1) > SELECT ALL FROM df_1 (result: df_2) > COUNT(df_2) 

この最初のデータフローの実行時間は 10 秒でした。次に、データフローに別のアクションを追加しました。

LOAD (result: df_1) > SELECT ALL FROM df_1 (result: df_2) > COUNT(df_2) > COUNT(df_2) 

データフローの 2 番目のバージョンを分析すると、すべての変換が遅延してアクションごとに再実行されるため (ドキュメントによると)、2 番目のカウントを実行するときに、前の 2 つの変換 (LOAD と SELECT ALL) の実行が必要になるはずです。したがって、データフローのこの 2 番目のバージョンを実行すると、時間は約 20 秒になると予想されました。ただし、実行時間は 11 秒でした。どうやら、最初のカウントで必要な変換の結果は、2 番目のカウントのために Spark によってキャッシュされたようです。

どうか、何が起こっているか知っていますか?

4

2 に答える 2

0

Action からデータを取得した後、データの将来の使用があることを再植民地化するのは、Spark DAG スケジューラです。Spark プログラムは、操作の論理有向非循環グラフ (DAG) を暗黙的に作成します。物理的な実行計画。

アクションは、DAG の実行計画への変換を強制します

RDDでアクションを呼び出すときは、計算する必要があります。あなたのケースでは、アクションを実行しているだけで、その後、その上で別のアクションを実行しています。これには、親RDDも計算する必要があります。Spark のスケジューラは、必要なすべての RDD を計算するジョブを送信します。そのジョブには 1 つ以上のステージがあり、タスクで構成される並列計算の波です。各ステージは、DAG 内の 1 つ以上の RDD に対応します。パイプライン処理により、1 つのステージで複数の RDD に対応できます。

スパークの可視化

DAG

于 2016-12-09T15:45:54.817 に答える