2016-05-24 3 views
0

Я ищу трюк, чтобы заставить Spark выполнять операцию сокращения локально между всеми задачами, выполняемыми рабочими ядрами, прежде чем делать это для всех задач. Действительно, кажется, что мой узел драйвера и сетевой переключатель перегружены из-за больших результатов задачи (= 400 МБ).Как заставить искру выполнять сокращение локально

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 разделов рабочего.

+0

Вы хотите, чтобы reduceByKey делал локальное слияние перед агрегацией. –

ответ

2

Ничего не нужно, потому что reduce applies reduction locally for each partition. Только the final merge is applied on the driver. Не говоря уже о 400 МБ, не должно быть проблемой в какой-либо разумной конфигурации.

Тем не менее, если вы хотите больше работать над рабочими, вы можете использовать treeReduce, хотя с 8 разделами почти ничего не выиграть.

Смежные вопросы