Spark streaming JavaPairDStream到文本文件

Spark streaming JavaPairDStream到文本文件,java,apache-spark,spark-streaming,rdd,dstream,Java,Apache Spark,Spark Streaming,Rdd,Dstream,我对Spark streaming非常陌生,我一直在保存我的输出 我的问题是,如何将JavaPairDStream的输出保存在一个文本文件中,该文本文件仅使用数据流中的元素对每个文件进行更新 例如,以wordCount为例 JavaPairDStream<String, Integer> wordCounts = words.mapToPair( new PairFunction<String, String, Integer>() { @Ov

我对Spark streaming非常陌生,我一直在保存我的输出

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

例如,以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
的内容刷新该文件

我尝试过以下方法

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;
            }
        });
mappedRDD.foreachRDD(新函数2(){
公共Void调用(JavaPairDStream rdd,Time)
{
//通过rdd将其内容保存到文件中???
返回null;
}
});
我希望能得到一些帮助

谢谢你

你可以像下面这样做。因此,与saveAsTextFile相关的post将输出多个文件

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