我使用fileStream从Spark(流式上下文)读取hdfs目录中的文件。如果我的Spark关闭并在一段时间后启动,我想读取目录中的新文件。我不想读取已经由Spark读取和处理的目录中的旧文件。我想在这里避免重复。
val lines = ssc.fileStream[LongWritable, Text, TextInputFormat]("/home/File")
任何代码片段都有帮助吗?
答案 0 :(得分:14)
您可以使用FileSystem
API:
import org.apache.hadoop.fs.{FileSystem, Path}
val fs = FileSystem.get(sc.hadoopConfiguration)
val outPutPath = new Path("/abc")
if (fs.exists(outPutPath))
fs.delete(outPutPath, true)
答案 1 :(得分:1)
fileStream
已经为您处理了这个问题 - 来自Scaladoc:
创建一个输入流,监视与Hadoop兼容的文件系统以获取新文件,并使用给定的键值类型和输入格式读取它们。
这意味着fileStream
只会加载新文件(在启动流式上下文后创建),在启动流应用程序之前已存在于该文件夹中的任何文件都将被忽略。