2015-03-05 6 views
0

Я пытаюсь использовать искру Apache, чтобы загрузить файл, и распространять файл на несколько узлов в моем кластере, а затем агрегировать результаты и получить их. Я не совсем понимаю, как это сделать.Использование Уменьшить в Apache Spark

По моему мнению, действие reduce позволяет Spark объединить результаты из разных узлов и объединить их вместе. Я правильно понимаю это?

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

  1. Как именно я разделяю основной набор данных на N частей и прошу их параллельно обрабатывать, используя список преобразований?

  2. reduce Предполагается взять два элемента и функцию для их объединения. Являются ли эти 2 элемента, которые, как предполагается, являются RDD из контекста Spark или могут быть элементами любого типа? Кроме того, если у вас есть N разных разделов, работающих параллельно, как бы уменьшить совокупность всех их результатов в один конечный результат (поскольку функция сокращения агрегирует только 2 элемента)?

Кроме того, я не понимаю этот пример. Пример с сайта искры использует reduce, но я не вижу, что данные обрабатываются параллельно. Итак, в чем смысл сокращения? Если бы я мог получить подробное объяснение цикла в этом примере, я думаю, что это прояснит большинство моих вопросов.

class ComputeGradient extends Function<DataPoint, Vector> { 
    private Vector w; 
    ComputeGradient(Vector w) { this.w = w; } 
    public Vector call(DataPoint p) { 
    return p.x.times(p.y * (1/(1 + Math.exp(w.dot(p.x))) - 1)); 
    } 
} 

JavaRDD<DataPoint> points = spark.textFile(...).map(new ParsePoint()).cache(); 
Vector w = Vector.random(D); // current separating plane 
for (int i = 0; i < ITERATIONS; i++) { 
    Vector gradient = points.map(new ComputeGradient(w)).reduce(new AddVectors()); 
    w = w.subtract(gradient); 
} 
System.out.println("Final separating plane: " + w); 

Кроме того, я пытался найти исходный код для уменьшения от Apache Спарк Github, но источник довольно огромен, и я не в состоянии точно определить его. Может кто-нибудь, пожалуйста, направить меня к тому файлу, в котором я могу его найти?

ответ

3

Это очень много вопросов. В будущем вы должны разбить это на несколько. Я дам высокий уровень, который должен ответить им за вас.

Во-первых, here is the file with reduce. Во-вторых, большинство ваших проблем связано с попытками слишком много микроменеджмента (необходимо только в том случае, если вам нужно настроить настройку). Вы должны сначала понять суть того, что Spark и что такое RDD. Это коллекция, которая распараллеливается под капотом. С точки зрения программирования это просто еще одна коллекция. И reduce - это просто функция в этой коллекции, общая в функциональном программировании. Все это делает управляет оператор против всех вашей коллекции, превращая его в один результат, как показано ниже:

((item1 op item2) op item3) op .... 

Последний, в примере, код просто работает итеративный алгоритм над данными сойтись на какой-то момент. Это общая задача для алгоритмов машинного обучения.

Опять же, я не буду сосредотачиваться на деталях, пока вы не получите более полное представление о высоком уровне распределенного программирования. Spark - это просто абстракция сверху, чтобы превратить этот тип программирования в обычный код :)

+0

Спасибо! Я предполагаю, что я до сих пор неясно, как работает распараллеливание капота. Если у меня есть RDD и применить X различных преобразований, прежде чем получить какой-то результат и попытаться уменьшить, как он распараллелен? Нужно ли предоставлять информацию о IP-адресах моего кластера, чтобы он мог делегировать обработку? – AndroidDev93

+0

Вы имеете дело с этим во время отправки, как правило, с помощью инструмента spark-submit –

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