我对Spark和Scala中的并行性有些困惑。我正在运行一个实验,我必须从磁盘更改/处理某些列中读取许多(csv)文件,然后将其写回磁盘。
在我的实验中,如果我只使用 SparkContext的parallelize方法,那么它似乎对性能没有任何影响。然而,简单地使用Scala的并行集合(通过标准杆)将时间减少到几乎一半。
我在localhost模式下运行我的实验,其中参数local [2]用于spark上下文。
我的问题是我何时应该使用scala的并行集合以及何时使用spark context的并行化?
答案 0 :(得分:4)
SparkContext将进行额外处理以支持多个节点的通用性,这将在数据大小上保持不变,因此对于大型数据集可能可以忽略不计。在1节点上,这种开销会使它比Scala的并行集合慢。
在
时使用Spark答案 1 :(得分:3)
SparkContext的parallelize可能使你的集合适合在多个节点上处理,也适用于单个工作者实例的多个本地核心(本地[2]),但是再次,你可能会因运行Spark的任务调度程序而得到太多的开销一切都那么神奇。当然,Scala的并行集合在单机上应该更快。
http://spark.incubator.apache.org/docs/latest/scala-programming-guide.html#parallelized-collections - 您的文件是否足够大,可以自动拆分为多个切片,您是否尝试手动设置切片编号?
您是否尝试在单核上运行相同的Spark作业,然后在两个核上运行?
预计Spark的最佳结果是一个非常大的统一结构文件,而不是多个较小的文件。