2016-12-07 5 views
1

私はスパークストリーミングでかなり新しく、出力を保存していません。スパークストリーミングJavaPairDStreamをテキストファイル

私の質問は、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

ありがとうございます。 Hereは、saveAsTextFileに関連するSOの投稿で、複数のファイルを出力します。

wordCounts.foreachRDD(rdd ->{ 
      if(!rdd.isEmpty()){ 
      rdd.coalesce(1).saveAsTextFile("c:\\temp\\count\\"); 
      } 
     }); 
関連する問題