【发布时间】:2015-05-06 23:01:10
【问题描述】:
我正在尝试使用 Apache spark 加载文件,并将文件分发到集群中的多个节点,然后汇总结果并获取它们。我不太明白如何做到这一点。
据我了解,reduce 操作使 Spark 能够组合来自不同节点的结果并将它们聚合在一起。我理解正确吗?
从编程的角度来看,我不明白如何编写这个 reduce 函数。
我究竟如何将主数据集划分为 N 个部分,并要求它们使用转换列表进行并行处理?
reduce应该包含两个元素和一个用于组合它们的函数。这两个元素应该是 Spark 上下文中的 RDD,还是可以是任何类型的元素?另外,如果你有 N 个不同的分区并行运行,reduce 如何将它们的所有结果聚合成一个最终结果(因为 reduce 函数只聚合 2 个元素)?
另外,我不明白这个例子。 spark 网站上的示例使用reduce,但我没有看到并行处理的数据。那么,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 的源代码,但源代码非常庞大,我无法确定它。有人可以指导我在哪个文件中找到它吗?
【问题讨论】:
标签: hadoop apache-spark reduce