Я пытаюсь использовать искру Apache, чтобы загрузить файл, и распространять файл на несколько узлов в моем кластере, а затем агрегировать результаты и получить их. Я не совсем понимаю, как это сделать.Использование Уменьшить в Apache Spark
По моему мнению, действие reduce
позволяет Spark объединить результаты из разных узлов и объединить их вместе. Я правильно понимаю это?
С точки зрения программирования я не понимаю, как бы я закодировал эту функцию уменьшения.
Как именно я разделяю основной набор данных на N частей и прошу их параллельно обрабатывать, используя список преобразований?
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, но источник довольно огромен, и я не в состоянии точно определить его. Может кто-нибудь, пожалуйста, направить меня к тому файлу, в котором я могу его найти?
Спасибо! Я предполагаю, что я до сих пор неясно, как работает распараллеливание капота. Если у меня есть RDD и применить X различных преобразований, прежде чем получить какой-то результат и попытаться уменьшить, как он распараллелен? Нужно ли предоставлять информацию о IP-адресах моего кластера, чтобы он мог делегировать обработку? – AndroidDev93
Вы имеете дело с этим во время отправки, как правило, с помощью инструмента spark-submit –