我正在开发一个Scala-Spark程序,它需要从HDFS上的目录中获取最新创建的文件(每天在目录中创建一个文件),并读取其中的数据进行进一步处理。从我的研究中,我发现了下面的代码,可以使用Scala获取两天前的文件:
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但此代码不适用于HDFS上存在的文件。有人能告诉我如何使用Scala从HDFS上的目录中挑选最新创建的文件吗?
发布于 2017-11-27 19:35:44
您可以在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))这将以降序列出所有文件的文件修改/创建日期。您可以选择最新的文件作为第一个文件。
注意:如果使用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);https://stackoverflow.com/questions/47509087
复制相似问题