分区如何在spark并行化?

时间:2018-01-06 08:47:19

标签: apache-spark rdd

我为Spark编写以下代码:

val longList = 1 to 1000000 toList
val numsToAdd = sc.parallelize(longList,30)
val st = System.nanoTime()
println(numsToAdd.reduce((x,y) => x+y))
val et = System.nanoTime()
println("Time spend:"+(et-st))

我使用不同的分区值执行并行化转换。 时间花费如下:

 Partitions     Time spend

 default        97916961

 10             111907094

 20             141691820

 30             158264230

我的理解是,使用partitions参数,spark会将数据集划分为多个部分,并对每个部分执行并行操作。如此直观地说,更快的分区必须是程序。

但似乎相反。

我在本地计算机上运行程序。

分区是否以其他方式工作?

1 个答案:

答案 0 :(得分:1)

  

通常,更小/更多的分区允许工作   分布在更多的工作人员中,但更大/更少的分区允许工作   要用更大的块来完成,这可能会导致工作完成   只要所有工人保持忙碌,由于减少,就会更快   高架。

     

增加分区计数将使每个分区都具有   更少的数据(或根本没有!)

分区太少您将无法使用群集中的所有可用核心。

分区太多管理许多小任务会产生过多的开销。

根据spark docs,理想值是核心数的2-3倍。

Spark RDD Partition

Spark Repartition