2016-06-18 5 views
2

、次のコードは2つのステージが同じRDDを使用している場合、同じファイルを2回読み込みますか?スパーク

rdd = sc.textfile("file path") 
rdd1 = rdd.filter(filter1).maptopair(); 
rdd2 = rdd.filter(filter2).maptopair(); 
rdd3 = rdd1.join(rdd2); 
rdd3.saveastextfile(); 

3つの段階を生成します。 SparkのWeb UIからステージ1とステージ2が並行して実行され、ステージ2(ステージ3)は最初の2つが実行された後にトリガーされます。 私の質問はステージ1とステージ2の両方で同じファイルを同時に読むのですか? これは、Sparkが同じファイルを2回読み込むことを意味しますか?

+0

まあ、このコード以外のパフォーマンスは、実行時またはコンパイル時に失敗します。 – zero323

+0

2つの 'filter'アクションを使用している場合、' join'を使わずに1つのステップにまとめることができます –

答えて

2

TL; DR;はい、それは2度読むでしょう。

最初の読み込みがすでにメモリ(キャッシュ/ OSキャッシュ)にある場合は、それを直接読み込みで使用します。実装を掘り下げることなく、具体的なシナリオは同時読み込みの可能性が高いでしょう。つまり、その理由はDataFramesが作成された理由です。コードはブラックボックスなので、部分的に共有されている系譜を超えて、スケジューラに関する限り、全体的なステージ(readとmap *)が異なります。既に述べたように、できるだけキャッシュされているすべての系統を再利用します。

もっと共有したい場合は、DataFramesを使用してください。完全な系統と、マージ操作の恩恵を受けることができるのは親密な知識です。たとえば、コードを取り出してSQLにプッシュすると、探しているマージが表示されます。

* filterの代わりにmapを指定したと仮定します。joinはそれ以外の場合は動作しません。

関連する問題