了解Spark和Scala中的并行性

MAR*_*ARK 8 parallel-processing scala apache-spark

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

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

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

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

sam*_*est 5

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

使用 Spark 时

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


Utg*_*rda 3

SparkContext 的并行化可能使您的集合适合在多个节点以及单个工作实例 ( local[2] ) 的多个本地核心上进行处理,但话又说回来,您可能会因运行 Spark 的任务调度程序而获得太多开销魔法。当然,Scala的并行集合在单机上应该更快。

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

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

Spark 最好的结果是使用一个非常大的统一结构文件,而不是多个较小的文件。