如何强制火花在当地进行减少

时间:2016-05-24 19:26:20

标签: apache-spark mapreduce partition reduction

我正在寻找一种技巧来强制Spark在为所有任务执行之前在工作者核心执行的所有任务之间本地执行还原操作。 实际上,由于任务结果很大(= 400MB),我的驱动程序节点和网络带开关似乎都会过载。

val arg0 = sc.broadcast(fs.read(0, 4))
val arg1 = sc.broadcast(fs.read(1, 4))
val arg2 = fs.read(5, 4) 
val index = info.sc.parallelize(0.toLong to 10000-1 by 1)
val mapres = index.map{ x => function(arg0.value, arg1.value, x, arg2) }
val output = mapres.reduce(Util.bitor)

驱动程序按处理器核心分配1个分区,因此按工作分配8个分区。

1 个答案:

答案 0 :(得分:3)

没有什么可以强迫的,因为reduce applies reduction locally for each partition。仅the final merge is applied on the driver。更不用说400MB在任何合理配置中都不应成为问题。

如果你想对工作人员进行更多的工作,你可以使用treeReduce,虽然有8个分区,但几乎没有任何好处。