2015-08-12 3 views
0

В настоящее время я работаю с Apache Spark. Но я не могу понять, как уменьшить работу после того, как карта ..Как уменьшить работу RDD в Apache Spark

мой пример довольно прост

val map = readme.map(line => line.split(" ").size)

я знаю, что это будет возвращать массив количество слов в строке, но где ключ/значение здесь, чтобы передать свертка функции ..

map.reduce((a,b) => {if(a>b) a else b}) 

уменьшить фазу, как это работает .. (а, б) является tuple_2? или его ключ/значение из функции карты?

ответ

0

После того как вы

val map = readme.map(line => line.split(" ").size) 

Каждый элемент ДРР состоит из одного числа, количество слов в строке файла.

Вы можете считать все слова в своем наборе данных map.sum() или map.reduce((a,b) => a+b), что эквивалентно.

Код, который вы выложили:

map.reduce((a,b) => {if(a>b) a else b}) 

найдет максимальное количество слов в строке для всего набора данных.

Метод RDD.reduce работает путем преобразования всех двух элементов, с которыми он сталкивается, которые сначала берутся из пар строк RDD, в другой элемент, в этом случае число. Функция агрегации должна быть записана так, чтобы она могла быть вложенной и вызывать строки в любом порядке. Например, вычитание не даст полезных результатов в качестве функции reduce, потому что вы не можете заранее предсказать, какие результаты будут вычтены друг из друга. Добавление, однако, или максимизация, все равно работает правильно независимо от порядка.

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