2015-08-26 24 views
6

Wenn wir einen Ordner folder mit allen .txt Dateien haben, können wir sie alle lesen sc.textFile("folder/*.txt"). Aber was ist, wenn ich einen Ordner folder habe, der noch mehr Ordner mit dem Namen datewise enthält, wie 03, 04, ..., die außerdem einige .log Dateien enthalten. Wie lese ich diese in Spark?Lesen Sie alle Dateien in einem verschachtelten Ordner in Spark

In meinem Fall ist die Struktur noch verschachtelter & Komplex, so dass eine allgemeine Antwort bevorzugt wird.

Antwort

12

Wenn Verzeichnisstruktur regelmäßig ist, läßt so etwas wie dies sagt:

folder 
├── a 
│   ├── a 
│   │   └── aa.txt 
│   └── b 
│    └── ab.txt 
└── b 
    ├── a 
    │   └── ba.txt 
    └── b 
     └── bb.txt 

Sie * Platzhalter für jede Ebene der Verschachtelung verwenden können, wie unten dargestellt:

>>> sc.wholeTextFiles("/folder/*/*/*.txt").map(lambda x: x[0]).collect() 

[u'file:/folder/a/a/aa.txt', 
u'file:/folder/a/b/ab.txt', 
u'file:/folder/b/a/ba.txt', 
u'file:/folder/b/b/bb.txt'] 
+1

Das ist mein besonderes Problem gelöst. Übrigens, was, wenn die Verzeichnisstruktur nicht regelmäßig ist? – kamalbanga

+0

Dann beginnen die Dinge unordentlich :) Die Idee ist mehr oder weniger die gleiche, aber es ist unwahrscheinlich, dass Sie Muster vorbereiten können, die einfach wiederverwendet werden können. Sie können immer normale Tools zum Durchlaufen des Dateisystems und Sammeln von Pfaden anstelle von Hardcoding. – zero323

+0

Warum funktioniert das nicht mit '/ ordner/**/*. Txt'? Ich habe im Grunde die gleiche Verzeichnisstruktur und ich würde alles mit 'sc.wholeTextFiles öffnen ('data/**/*. Json')' aber das scheint nicht zu funktionieren ..? – displayname

Verwandte Themen