我为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会将数据集划分为多个部分,并对每个部分执行并行操作。如此直观地说,更快的分区必须是程序。
但似乎相反。
我在本地计算机上运行程序。
分区是否以其他方式工作?
答案 0 :(得分:1)
通常,更小/更多的分区允许工作 分布在更多的工作人员中,但更大/更少的分区允许工作 要用更大的块来完成,这可能会导致工作完成 只要所有工人保持忙碌,由于减少,就会更快 高架。
增加分区计数将使每个分区都具有 更少的数据(或根本没有!)
分区太少您将无法使用群集中的所有可用核心。
分区太多管理许多小任务会产生过多的开销。
根据spark docs,理想值是核心数的2-3倍。