2016-08-12 4 views
0

私は1つのDataFrameに結合したいのと同じスキーマで10 DataFrameを取得しました。それぞれDataFramesqlContext.sql("select ... from ...").cahceを使用して作成されます。つまり、技術的にはDataFrameは実際に使用するまで計算されません。スパークはUnionAllを並行して実行しますか?

私は実行するのであれば、:

val df_final = df1.unionAll(df2).unionAll(df3).unionAll(df4) ... 

は(原因ドット演算子に)パラレルまたは1つずつで、これらすべてのDataFrame Sを計算スパークのだろうか?

DataFrameの上にunionAllを先ほど作成したよりエレガントな方法がありますか?

+0

最後の部分については、http://stackoverflow.com/a/37612978/1560062を参照してください。それが "並行して"起きたら?並列リソースだけでなく、利用可能なリソースやデータが意味するものによって異なります。 – zero323

+0

@ zero323は、それを処理するのに十分なリソースがあると仮定すると、非同期的かつ非ブロック的に起こっていますか? – shakedzy

+0

私はDanielがこの質問にかなり答えたと思う:) – zero323

答えて

3

unionAllは、lazyである。あなたの質問の例の行は、同期または非同期の計算をトリガーしません。

一般に、スパークは分散計算システムです。各操作自体は、並行して処理される一連のタスクで構成されています。したがって、一般に、2つの操作を並行して実行するかどうかについて心配する必要はありません。クラスタリソースは、とにかくうまく利用されます。

関連する問題