在Spark中加入JavaPairRDD和JavaPairDStream

时间:2015-08-18 10:58:43

标签: apache-spark left-join spark-streaming

我有 JavaPairDStream> String,Long>流 JavaPairRDD>字符串,长>批次即可。 现在我想加入这两个。基本上我想使用Spark将批量数据加入实时数据。但是直接在参数内部使用JavaPairDStream来加入会给出错误。加入这两个我需要做些什么改变。这也是正确的方法,或者还有另一种方法可以在spark中结合批量视图和实时视图。

例如:stream.leftOuterJoin(batch); 这显示错误。我知道它们是两种不同的数据类型,但由于JavaPairDStream是实时RDD的抽象,它应该可以工作。

关于如何加入批量视图和实时视图的任何建议都会有所帮助。感谢。

抱歉,JavaPairDStream和JavaPairRDD中出现了错误的> 。我无法找到正确的转义字符来正确编写它。

1 个答案:

答案 0 :(得分:1)

好的,我已经得到了Transform Operation

中提到的解决方案

转换操作

变换操作(及其变体如transformWith)允许在DStream上应用任意RDD到RDD函数。它可用于应用未在DStream API中公开的任何RDD操作。例如,将数据流中的每个批次与另一个数据集连接的功能不会直接在DStream API中公开。但是,您可以轻松地使用transform来执行此操作。这使得非常强大的可能性。例如,如果要通过将输入数据流与预先计算的垃圾邮件信息(也可以使用Spark生成)连接,然后根据它进行过滤来进行实时数据清理。

import org.apache.spark.streaming.api.java.*;
// RDD containing spam information
final JavaPairRDD<String, Double> spamInfoRDD = jssc.sparkContext().newAPIHadoopRDD(...);
JavaPairDStream<String, Integer> cleanedDStream = wordCounts.transform( new Function<JavaPairRDD<String, Integer>, JavaPairRDD<String, Integer>>() {
          @Override public JavaPairRDD<String, Integer> call(JavaPairRDD<String, Integer> rdd) throws Exception {

      rdd.join(spamInfoRDD).filter(...); 
      // join data stream with spam information to do data cleaning
  ...
    }
});