是否可以在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?
如何显示相关性计算的结果?累加器是否是正确的解决方案?