在2个独立的JavaRDD

时间:2016-02-25 19:43:15

标签: apache-spark

我有一个非常简单的要求,我需要在具有相同数量元素的2个单独JavaRDD的相应元素上执行类似于逻辑AND的操作。 我试图看看是否可以在不将元素收集到内存并执行函数的情况下完成。

我试图避免

JavaRDD<String> set1;
JavaRDD<String> set2;
List<String> list1 = set1.collect();
List<String> list2 = set2.collect();
List<Integer> result = new ArrayList<>();
for(int i = 0; i< list1.size(); i++) {
    list1.get(i).equals(list2.get(i)) ? result.add(i, 1) : result.add(i,0);
}

这可以分发吗?我的JavaRDD都是GB的顺序。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用set1.zip(set2)以元素方式组合两个集合。

根据你的例子,类似于

JavaRDD<Integer> result = set1.zip(set2).map(new Function<Tuple2<String, String>, Integer>() {
    public Integer call(Tuple2<String, String> t) {
        if (t._1().equals(t._2()) {
            return 1;
        } else {
            return 0;
        }
    }
})