2017-05-10 9 views
0

HDFSパスがあり、すべてのサブフォルダをトラバースしてその中のすべてのファイルが「X」という名前であることを確認します。 1つのレベル内のファイルのSpark:HDFSサブフォルダをトラバースし、名前が「X」のすべてのファイルを見つけよう

FileSystem.get(sc.hadoopConfiguration) 
    .listStatus(new Path("hdfs://...")) 
    .foreach(x => println(x.getPath)) 

しかし、これだけで検索をし、私はすべてのレベルをしたい:

私はこれを行うことを試みました。

+1

[hadoop hdfsのディレクトリとそのサブディレクトリにあるすべてのファイルを一覧表示する方法](http://stackoverflow.com/questions/11342400/how-to-list-all-files-in-a-directory) -and-its-hadoop-hdfsのサブディレクトリ) – Shaido

答えて

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」を含むファイルをフィルタリングします。

関連する問題