了解Spark和Scala中的并行性

时间:2013-11-04 18:49:16

标签: scala parallel-processing apache-spark

我对Spark和Scala中的并行性有些困惑。我正在运行一个实验,我必须从磁盘更改/处理某些列中读取许多(csv)文件,然后将其写回磁盘。

在我的实验中,如果我只使用 SparkContext的parallelize方法,那么它似乎对性能没有任何影响。然而,简单地使用Scala的并行集合(通过标准杆)将时间减少到几乎一半。

我在localhost模式下运行我的实验,其中参数local [2]用于spark上下文。

我的问题是我何时应该使用scala的并行集合以及何时使用spark context的并行化?

2 个答案:

答案 0 :(得分:4)

SparkContext将进行额外处理以支持多个节点的通用性,这将在数据大小上保持不变,因此对于大型数据集可能可以忽略不计。在1节点上,这种开销会使它比Scala的并行集合慢。

时使用Spark
  1. 您有多个节点
  2. 您希望您的工作准备好扩展到多个节点
  3. 1节点上的Spark开销可以忽略不计,因为数据很大,所以你不妨选择更丰富的框架

答案 1 :(得分:3)

SparkContext的parallelize可能使你的集合适合在多个节点上处理,也适用于单个工作者实例的多个本地核心(本地[2]),但是再次,你可能会因运行Spark的任务调度程序而得到太多的开销一切都那么神奇。当然,Scala的并行集合在单机上应该更快。

http://spark.incubator.apache.org/docs/latest/scala-programming-guide.html#parallelized-collections - 您的文件是否足够大,可以自动拆分为多个切片,您是否尝试手动设置切片编号?

您是否尝试在单核上运行相同的Spark作业,然后在两个核上运行?

预计Spark的最佳结果是一个非常大的统一结构文件,而不是多个较小的文件。