【问题标题】:Spark streaming JavaPairDStream to text fileSpark将JavaPairDStream流式传输到文本文件
【发布时间】:2016-12-08 14:52:30
【问题描述】:

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

我将不胜感激。

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      相关资源
      最近更新 更多