2015-08-26 149 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

相关问题