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