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\\");
}
});