如何使用scala读取后删除hdfs目录中的文件

时间:2017-07-14 13:29:28

标签: scala hadoop apache-spark spark-streaming

我使用fileStream从Spark(流式上下文)读取hdfs目录中的文件。如果我的Spark关闭并在一段时间后启动,我想读取目录中的新文件。我不想读取已经由Spark读取和处理的目录中的旧文件。我想在这里避免重复。

val lines = ssc.fileStream[LongWritable, Text, TextInputFormat]("/home/File")

任何代码片段都有帮助吗?

2 个答案:

答案 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只会加载新文件(在启动流式上下文后创建),在启动流应用程序之前已存在于该文件夹中的任何文件都将被忽略。