6
如果我們有一個文件夾folder
包含所有.txt
文件,我們可以使用sc.textFile("folder/*.txt")
來讀取它們全部。但是如果我有一個文件夾folder
包含甚至更多名爲datewise的文件夾,如03
,04
,...,它們還包含一些.log
文件。我如何在Spark中閱讀這些內容?閱讀Spark中嵌套文件夾中的所有文件
在我的情況下,結構更復雜,因此一般的答案是首選。
如果我們有一個文件夾folder
包含所有.txt
文件,我們可以使用sc.textFile("folder/*.txt")
來讀取它們全部。但是如果我有一個文件夾folder
包含甚至更多名爲datewise的文件夾,如03
,04
,...,它們還包含一些.log
文件。我如何在Spark中閱讀這些內容?閱讀Spark中嵌套文件夾中的所有文件
在我的情況下,結構更復雜,因此一般的答案是首選。
如果目錄結構是有規律的,可以說,這樣的事情:
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']
這解決了我的具體問題。順便說一句,如果目錄結構不規則? – kamalbanga
然後事情開始變得凌亂:)想法或多或少是相同的,但不太可能您可以準備可輕鬆重複使用的模式。您可以隨時使用普通工具來遍歷文件系統並收集路徑而不是硬編碼。 – zero323
爲什麼這不適用於'/ folder/**/*。txt'?我基本上有完全相同的目錄結構,我想用'sc.wholeTextFiles('data/**/*。json')'打開所有,但這似乎不起作用。 – displayname