Spark中两个DStream的笛卡尔积

时间:2016-06-11 13:18:57

标签: apache-spark spark-streaming

如何在像cartesian(RDD<U>)这样的apache流中生成两个DStream,当调用类型为T和U的数据集时,返回(T,U)对的数据集(所有元素对)。

一种解决方案是使用如下的连接似乎并不好。

    JavaPairDStream<Integer, String> xx = DStream_A.mapToPair(s -> {
        return new Tuple2<>(1, s);
    });

    JavaPairDStream<Integer, String> yy = DStream_B.mapToPair(e -> {
        return new Tuple2<>(1, e);
    });

    DStream_A_product_B = xx.join(yy);

有没有更好的解决方案?或者我如何使用笛卡尔方法的RDD?

1 个答案:

答案 0 :(得分:0)

我找到了答案:

JavaPairDStream<String, String> cartes = DStream_A.transformWithToPair(DStream_B, 
     new Function3<JavaPairRDD<String, String>, JavaRDD<String>, Time, JavaPairRDD<String, String>>() {
        @Override
        public JavaPairRDD<String, String> call(JavaRDD<String> rddA, JavaRDD<String> rddB, Time v3) throws Exception {
            JavaPairRDD<String, String> res = rddA.cartesian(rddB);
            return res;
        }
    });