如何获取HDFS上存在的文件的创建日期?

Met*_*ata 1 hadoop scala

我正在开发一个Scala-Spark程序,该程序需要从HDFS上的目录中获取最新创建的文件(每天都会在目录中创建一个文件),并读取其中的数据以进行进一步处理。从我的研究中,我发现以下代码可以使用Scala将文件提早2天:

import java.nio.file._
import java.time._
import java.time.temporal.ChronoUnit.DAYS
val isMoreThan2DaysOld = Files.getLastModifiedTime(path).toInstant.plus(2, DAYS) isBefore Instant.now
Run Code Online (Sandbox Code Playgroud)

但是此代码不适用于HDFS上存在的文件。任何人都可以让我知道如何使用Scala从HDFS上存在的目录中实施最新创建的文件。

Ami*_*mar 5

您可以在scala中使用普通的hadoop文件系统Apis来获取文件修改日期。并选择最新的。

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

val conf = spark.sparkContext.hadoopConfiguration
val fs = FileSystem.get(conf)
val dirPath = new Path("csvdatatest")
val filestatus = fs.listStatus(dirPath )
filestatus.foreach(f => println(f.getModificationTime))
Run Code Online (Sandbox Code Playgroud)

这将以降序列出所有文件的文件修改/创建日期。您可以选择最新文件作为第一个文件。

注意:如果使用sparkcontext获取hadoop配置,则无需在配置中明确指定core-site.xml和hdfs-site.xml。正如我上面使用的。

但是您可以按照以下伪代码创建配置:为core-site.xml和hdfs-site.xml指定路径

val conf = new Configuration();
conf.addResource(new Path("<core-site-path>/core-site.xml"));
conf.addResource(new Path("<hdfs-site-path>/hdfs-site.xml"));
val fs = FileSystem.get(conf);
Run Code Online (Sandbox Code Playgroud)