gpt4 book ai didi

hadoop - 在 Apache Spark 中使用 Reduce

转载 作者:可可西里 更新时间:2023-11-01 16:26:00 26 4
gpt4 key购买 nike

我正在尝试使用 Apache spark 加载一个文件,并将该文件分发到我集群中的多个节点,然后聚合结果并获取它们。我不太明白该怎么做。

根据我的理解,reduce 操作使 Spark 能够组合来自不同节点的结果并将它们聚合在一起。我的理解正确吗?

从编程的角度来看,我不明白我将如何编写这个 reduce 函数。

  1. 我究竟如何将主数据集分成 N 个部分,并使用转换列表要求它们并行处理?

  2. reduce 应该接受两个元素和一个将它们组合起来的函数。这两个元素应该是 Spark 上下文中的 RDD,还是可以是任何类型的元素?另外,如果你有 N 个不同的分区并行运行,如何减少将它们的所有结果聚合为一个最终结果(因为 reduce 函数只聚合 2 个元素)?

另外,我不明白这个例子。 spark 网站的示例使用了 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 Spark Github 中找到 reduce 的源代码,但源代码非常庞大,我无法准确定位。有人可以指导我在哪个文件中找到它吗?

最佳答案

这是很多问题。将来,您应该将其分解为多个。我会给出一个应该为您回答的高级别。

首先,here is the file with reduce .其次,您的大部分问题都来自于尝试进行过多的微观管理(只有在需要性能调整时才有必要)。您需要首先了解什么是 Spark 的核心以及什么是 RDD。它是一个在引擎盖下并行化的集合。从您的编程角度来看,它只是另一个集合。而 reduce 只是该集合上的一个函数,是函数式编程中的常见函数。它所做的只是针对您的所有集合运行一个运算符,将其变成如下所示的一个结果:

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

最后,在示例中,代码只是对数据运行迭代算法以收敛于某个点。这是机器学习算法的常见任务。

同样,在您更好地理解高级分布式编程之前,我不会关注细节。 Spark 只是将这种类型的编程转换回常规代码的顶层抽象:)

关于hadoop - 在 Apache Spark 中使用 Reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28880169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com