看起来SparkContext的textFile只期望给定目录位置中存在文件 - 它不会
- (a) 递归或者
- (b) 支持目录(尝试将目录读取为文件)
有什么建议如何构建一个递归 - 可能比手动创建递归文件列表/下降逻辑更简单?
这是用例:在
/data/tables/my_table
下面的所有目录级别中的所有文件都希望能够通过hdfs调用进行读取。
更新
sc.textFile()通过(子类)TextInputFormat调用Hadoop FileInputFormat。内部逻辑确实存在于执行递归目录读取的逻辑 - 即首先检测条目是否为目录,如果是,则进行下降:
<!-- language: java -->
for (FileStatus globStat: matches) {
218 if (globStat.isDir()) {
219 for(FileStatus stat: fs.listStatus(globStat.getPath(),
220 inputFilter)) {
221 result.add(stat);
222 }
223 } else {
224 result.add(globStat);
225 }
226 }
然而,当调用sc.textFile时,目录条目会出现错误:“不是文件”。这种行为很令人困惑-因为似乎已经有适当的支持来处理目录了。
textFile(/path/*/*)
。 - Nick Chammas