Spark将JavaPairDStream传输到文本文件

时间:2016-12-07 17:22:29

标签: java apache-spark spark-streaming rdd dstream

我是关于Spark流媒体的新手,我很难保存输出。

我的问题是,如何将JavaPairDStream的输出保存在一个文本文件中,该文件仅针对每个文件使用DStream中的元素进行更新?

例如,使用wordCount示例,

JavaPairDStream<String, Integer> wordCounts = words.mapToPair(
      new PairFunction<String, String, Integer>() {
        @Override
        public Tuple2<String, Integer> call(String s) {
          return new Tuple2<>(s, 1);
        }
      }).reduceByKey(new Function2<Integer, Integer, Integer>() {
        @Override
        public Integer call(Integer i1, Integer i2) {
          return i1 + i2;
        }
      });

我会使用wordCounts.print()

获得以下输出
(Hello,1)
(World,1)

我想将最后一行写入文本文件,每个批次都会刷新wordCounts的内容。

我尝试过以下方法,

mappedRDD.dstream().saveAsTextFiles("output","txt");

这会产生一堆目录,每批次都有几个无意义的文件。

另一种方法是,

mappedRDD.foreachRDD(new Function2<JavaPairDStream<String, Integer>, Time, Void>() {
            public Void Call(JavaPairDStream<String, Integer> rdd, Time time)
            {
                //Something over rdd to save its content on a file???

                return null;
            }
        });

我将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

你可以像下面这样做。 Here与saveAsTextFile相关的SO帖子输出多个文件。

 wordCounts.foreachRDD(rdd ->{
          if(!rdd.isEmpty()){
             rdd.coalesce(1).saveAsTextFile("c:\\temp\\count\\");
          }
      });