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 によってキャッシュされたようです。
どうか、何が起こっているか知っていますか?