我有一个hdfs目录,其中包含许多文件:
x[0] = 1; // NPE, because x is null
并且有一个守护进程,每分钟向该目录添加一个文件。 (例如,5.txt,6.txt,7.txt ......)
我想启动一个加载3.txt,4.txt的火花流工作,然后在4.txt之后检测所有新文件。
请注意,因为这些文件很大,处理这些文件需要很长时间。因此,如果我在启动流式传输任务之前处理3.txt和4.txt,则在处理3.txt和4.txt期间可能会生成5.txt,6.txt到此目录。当流媒体任务开始时,5.txt和6.txt将被遗漏进行处理,因为它只会从新文件处理(来自7.txt)
我不确定我是否清楚地描述了问题,如果您有任何疑问,请问我
答案 0 :(得分:1)
我找到了解决方案:
根据doc api:https://spark.apache.org/docs/1.1.0/api/scala/index.html#org.apache.spark.streaming.StreamingContext
DEF fileStream [K,V,F<:InputFormat [K,V]](目录:String,filter:(Path)⇒Boolean,newFilesOnly:Boolean)(隐式arg0:ClassTag [K],arg1:ClassTag [V], arg2:ClassTag [F]):InputDStream [(K,V)] 创建一个输入流,监视与Hadoop兼容的文件系统以获取新文件,并使用给定的键值类型和输入格式读取它们。
我们可以设置过滤器功能来过滤文件< 4.txt
然后将“newFilesOnly”设置为false