Spark потоковой передачи JavaPairDStream в текстовый файл

Я довольно новичок в потоковой передаче 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 ответ

Решение

Вы можете сделать это, как показано ниже. Вот ТАК сообщение, связанное с saveAsTextFile выводит несколько файлов.

 wordCounts.foreachRDD(rdd ->{
          if(!rdd.isEmpty()){
             rdd.coalesce(1).saveAsTextFile("c:\\temp\\count\\");
          }
      });
Другие вопросы по тегам