Spark streaming JavaPairDStream到文本文件
我对Spark streaming非常陌生,我一直在保存我的输出 我的问题是,如何将JavaPairDStream的输出保存在一个文本文件中,该文本文件仅使用数据流中的元素对每个文件进行更新 例如,以wordCount为例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
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\\");
}
});