如何从 HDFS 获取只需要的文件?
Posted
技术标签:
【中文标题】如何从 HDFS 获取只需要的文件?【英文标题】:How get only need files from HDFS? 【发布时间】:2022-01-09 14:54:09 【问题描述】:我有方法 getAllFiles:
import org.apache.hadoop.fs.LocatedFileStatus, Path
def getAllDLFiles: Iterator[LocatedFileStatus] =
val hadoopConfig = spark.sparkContext.hadoopConfiguration
val isCsvFile = (_ : LocatedFileStatus).getPath.getName.endsWith(".csv")
val allFiles = path.getFileSystem(hadoopConfig)
.listFiles(path, true)
.filter(isCsvFile)
allFiles
此方法从目录中读取所有文件。然后它应用一个只返回 csv 文件的过滤器。
但我想立即应用过滤器。在他归还所有文件之前。请帮我。 我知道在 Hadoop 文件系统库中有一个特殊的类——PathFilter。但我不知道如何使用它。
【问题讨论】:
路径过滤器的工作方式相同 【参考方案1】:我认为没有太大区别,因为它仍然会迭代所有 NameNode 条目。此外,您不需要 Spark 来执行此操作
在 Java 中,
FileSystem fileSystem = Filesystem.get(new Configuration());
for (FileStatus fileStatus : fileSystem.globStatus(new Path("/path/to/data/*"), new PathFilter()
public boolean accept(Path path)
return path.toString().matches("\\.csv$");
System.out.println(fileStatus);
但如果使用 Spark,您可以通过 spark.read.format("csv").path("/path/to/data/")
读取所有 CSV,前提是您不关心文件名并且想要实际读取数据
【讨论】:
以上是关于如何从 HDFS 获取只需要的文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 HDFS 获取和查看 oracle BLOB (Image) 数据到本地系统?