2016-06-11 78 views
0

如何在产生两个DStream的Apache流中像cartesian(RDD<U>)那样在T和U类型的数据集上调用时返回(T,U)对(所有元素对)的数据集。两个DStream在Spark中的笛卡尔乘积

一个解决方案是使用连接,看起来不太好。

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的笛卡尔方法?

+0

不是它这样http://stackoverflow.com/questions/29034825/cartesian-of-dstream? –

+0

@RamPrasadG不!它是具有RDD的DStream的笛卡尔。但我有两个DStream。 –

回答

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; 
     } 
    });