Apache Spark:如何在RDD循环中使用RDD?

时间:2016-09-22 11:22:02

标签: java apache-spark

是否可以在Apache Spark中并行化运行循环并在此循环中使用RDD?

我想将相关函数用于值的笛卡尔积。这个笛卡尔积非常大,所以我在考虑并行化循环。

但是如果我并行化循环,我仍然可以在这个循环中使用RDD吗? 收集和迭代不是一种选择。

示例:

假设我在Dataframe数据中有产品,日期和价格。

RDD材料是我所有产品的清单。

DataFrame data;
JavaRDD<String> materials;

JavaPairRDD<String, String> cartesian = materials.cartesian(materials);

在下一步中,我想遍历我的笛卡尔RDD的所有组合,并过滤元组值的数据帧。

我想到的是这样的:

cartesian.foreach(new VoidFunction<Tuple2<String, String>() {

    public void call (Tuple2<String, String> arg0) throws Exception {

    JavaRDD<Double> rdd1 = data.where(data.col("product").equalTo(arg0._1))
        .toJavaRDD().map(new Function<Row, Double>() {

        public Double call(Row arg1) throws Exception {
        return arg1.getDouble(2);
        }
    });

    JavaRDD<Double> rdd2 = ...

    }

    Statistics.corr(rdd1, rdd2);
});

这会在我尝试创建rdd1的行中创建内存泄漏错误。有没有办法做这样的事情? 有没有办法在并行循环中使用RDD?

如何显示相关性计算的结果?累加器是否是正确的解决方案?

0 个答案:

没有答案