Java 查找上次修改的文件的最快方法';x';会议记录

Java 查找上次修改的文件的最快方法';x';会议记录,java,scala,apache-spark,Java,Scala,Apache Spark,我需要在目录中查找在过去10分钟内修改的文件。该目录不断更新,每次大约有50k-60k个文件。我正在使用以下代码获取文件: import java.io.File import java.time.Instant val dir = new File("/path/to/dir") val files = dir.listFiles.toList.filter(f => f.getName.matches("some filter")) file

我需要在目录中查找在过去10分钟内修改的文件。该目录不断更新,每次大约有50k-60k个文件。我正在使用以下代码获取文件:

import java.io.File
import java.time.Instant

val dir = new File("/path/to/dir") 
val files = dir.listFiles.toList.filter(f => f.getName.matches("some filter"))
files.filter(f => f.isFile && f.exists &&
    Instant.ofEpochMilli(f.lastModified).plus(10, MINUTES).isAfter(Instant.now))
    .toList.sortBy(_.lastModified)
这大约需要20-30分钟来运行。但我想在10分钟内得到结果。 我甚至试着用spark在hadoop集群中运行它。这是火花代码:

val sparkConfig = new SparkConf()
    .setAppName("findRecentFiles")
    .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
    .set("spark.shuffle.compress", "true")
    .set("spark.rdd.compress", "true")
val sc = new SparkContext(sparkConfig)
val rdd = sc.parallelize(files)
rdd.filter(f => f.isFile && f.exists &&
    Instant.ofEpochMilli(f.lastModified).plus(10, MINUTES).isAfter(Instant.now))
    .collect.toList.sortBy(_.lastModified)
但这需要同样的时间。我注意到,基于文件名的过滤速度很快。但是添加最新修改的过滤器会使速度变慢。有没有更好的方法让我更快地得到结果

更新
我更新了spark配置,现在我可以在不到10分钟内得到结果。之前,我是这样运行jar的:

spark-submit myJar.jar
我把它改成这样:

spark-submit --deploy-mode client --queue SomeNonDefaultQueue --executor-memory 16g --num-executors 10 --executor-cores 1 --master yarn myJar.jar

还从代码中删除了
set(“spark.rdd.compress”,“true”)
,因为它会增加CPU时间,正如这里所解释的-

问题在于
stat()
在对目录进行线性搜索以查找名称之后,检查是否要进行最后修改。如果可以更改目录格式,请添加子目录(按文件名计算),并尝试将每个子目录中的条目数分组到~1000


否则,创建一个名为:lastModified的映射,并在触发事件时使用更新映射。

您是从HDFS还是本地读取目录?我是从本地读取目录