我有一个HDFS路径,我想遍历所有子文件夹,找到名称为" X"的所有文件。
我试过这样做:
FileSystem.get( sc.hadoopConfiguration )
.listStatus( new Path("hdfs://..."))
.foreach( x => println(x.getPath))
但是这只搜索1级内的文件,我想要所有级别。
答案 0 :(得分:1)
您需要递归获取所有文件。循环遍历路径并获取所有文件,如果它是一个目录再次调用相同的函数。 下面是一个简单的代码,您可以将其修改为配置和测试。
var fileSystem : FileSystem = _
var configuration: Configuration = _
def init() {
configuration = new Configuration
fileSystem = FileSystem.get(configuration)
val fileStatus: Array[FileStatus] = fileSystem.listStatus(new Path(""))
getAllFiles(fileStatus)
}
def getAllFiles(fileStatus: Array[FileStatus]) {
fileStatus.map(fs => {
if (fs.isDirectory)
getAllFiles(fileSystem.listStatus(fs.getPath))
else fs
})
}
获取文件列表后,还会过滤包含“X”的文件。