9

Spark と Scala の並列処理について混乱しています。ディスクから多くの(csv)ファイルを読み取り、特定の列を変更/処理してから、ディスクに書き戻す必要がある実験を実行しています。

私の実験では、SparkContext の parallelize メソッドのみを使用した場合、パフォーマンスに影響はないようです。ただし、Scala の並列コレクション (par を介して) を使用するだけで、時間がほぼ半分に短縮されます。

spark コンテキストの引数 local[2] を使用して、localhost モードで実験を実行しています。

私の質問は、いつ scala の並列コレクションを使用する必要があり、いつ Spark コンテキストの並列化を使用する必要があるかということです。

4

2 に答える 2

5

SparkContext は、複数のノードの一般性をサポートするために追加の処理を行います。これはデータ サイズに対して一定であるため、巨大なデータ セットでは無視できる場合があります。1 つのノードでは、このオーバーヘッドにより、Scala の並列コレクションよりも遅くなります。

次の場合に Spark を使用します。

  1. 複数のノードがあります
  2. ジョブを複数のノードにスケーリングできるようにしたい
  3. データが巨大であるため、1 つのノードでの Spark のオーバーヘッドは無視できるほど小さいため、よりリッチなフレームワークを選択することもできます。
于 2014-01-01T13:19:54.207 に答える
3

SparkContext の並列化により、コレクションが複数のノードでの処理に適したものになる可能性があります。また、単一のワーカー インスタンス ( local[2] ) の複数のローカル コアでの処理にも適しています。マジック。もちろん、Scala の並列コレクションは、単一のマシンでより高速になるはずです。

http://spark.incubator.apache.org/docs/latest/scala-programming-guide.html#parallelized-collections - ファイルは自動的に複数のスライスに分割されるのに十分な大きさですか?手動でスライス数を設定しようとしましたか?

シングルコアで同じ Spark ジョブを実行してから、2 つのコアで実行しようとしましたか?

複数の小さなファイルを使用するのではなく、非常に大きな均一に構造化された 1 つのファイルを使用して、Spark から最良の結果を期待してください。

于 2013-11-22T16:19:44.240 に答える