2014-11-19 15 views
16

Ich habe ein Verzeichnis von Verzeichnissen auf HDFS, und ich möchte über die Verzeichnisse iterieren. Gibt es eine einfache Möglichkeit, dies mit Spark mithilfe des SparkContext-Objekts zu tun?Spark iterate HDFS Verzeichnis

+0

du meinst ‚Iterierte‘ wie in die Liste der Unterverzeichnisse und Dateien erhalten? oder alle Dateien über alle Unterverzeichnisse erhalten? – maasg

+0

Iterate wie in Liste alle Unterverzeichnisse. Jedes Unterverzeichnis enthält eine Reihe von Textdateien, die ich auf verschiedene Arten verarbeiten möchte. – Jon

Antwort

30

Sie können org.apache.hadoop.fs.FileSystem verwenden. Insbesondere FileSystem.listFiles([path], true)

Und mit Funken ...

FileSystem.get(sc.hadoopConfiguration()).listFiles(..., true) 
+1

Perfekt, danke. – Jon

+0

wirklich nett! [Ich hatte diese Frage] (http://stackoverflow.com/questions/34738296/spark-spark-submit-jars-arguments-wants-comma-list-how-to-declare-a-directory/35550151#35550151), gewährt, ich denke, das würde nicht funktionieren in der ursprünglichen Spark-Submit Call – JimLohse

+0

Wie kann ich eine Liste der Dateien mit dem RemoteIterator erstellt erstellen? – horatio1701d

5
import org.apache.hadoop.fs.{FileSystem,Path} 

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

Das ist für mich gearbeitet.

Spark-Version 1.5.0-cdh5.5.2

2

Sie mit globStatus Status

auch versuchen können,
val listStatus = org.apache.hadoop.fs.FileSystem.get(new URI(url), sc.hadoopConfiguration).globStatus(new org.apache.hadoop.fs.Path(url)) 

     for (urlStatus <- listStatus) { 
     println("urlStatus get Path:"+urlStatus.getPath()) 
} 
4

Hier PySpark Version, wenn jemand interessiert ist:

hadoop = sc._jvm.org.apache.hadoop 

fs = hadoop.fs.FileSystem 
conf = hadoop.conf.Configuration() 
path = hadoop.fs.Path('/hivewarehouse/disc_mrt.db/unified_fact/') 

for f in fs.get(conf).listStatus(path): 
    print f.getPath() 

In diesem speziellen Fall bekomme ich eine Liste aller Dateien, die disc_mrt.unified_fact Hive-Tabelle bilden.

Andere Methoden des Filestatus Objekt, wie getLen() Dateigröße beschrieben sind hier zu bekommen:

Class FileStatus

Verwandte Themen