2015-08-26 148 views
6

如果我們有一個文件夾folder包含所有.txt文件,我們可以使用sc.textFile("folder/*.txt")來讀取它們全部。但是如果我有一個文件夾folder包含甚至更多名爲datewise的文件夾,如03,04,...,它們還包含一些.log文件。我如何在Spark中閱讀這些內容?閱讀Spark中嵌套文件夾中的所有文件

在我的情況下,結構更復雜,因此一般的答案是首選。

回答

12

如果目錄結構是有規律的,可以說,這樣的事情:

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

您可以使用通配符*對於嵌套每個級別,如下圖所示:

>>> 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

這解決了我的具體問題。順便說一句,如果目錄結構不規則? – kamalbanga

+0

然後事情開始變得凌亂:)想法或多或少是相同的,但不太可能您可以準備可輕鬆重複使用的模式。您可以隨時使用普通工具來遍歷文件系統並收集路徑而不是硬編碼。 – zero323

+0

爲什麼這不適用於'/ folder/**/*。txt'?我基本上有完全相同的目錄結構,我想用'sc.wholeTextFiles('data/**/*。json')'打開所有,但這似乎不起作用。 – displayname

相關問題