【发布时间】:2023-04-05 17:38:01
【问题描述】:
SparkContext textFile 似乎只希望文件出现在给定的目录位置 - 它也没有
- (a) 递归或
- (b) 甚至 support 目录(尝试将目录读取为文件)
关于如何构建递归的任何建议 - 可能比手动创建递归文件列表/下降逻辑更简单?
这是用例:
下的文件/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 时,目录条目出现错误:“不是文件”。这种行为令人困惑 - 鉴于似乎已经为处理目录提供了适当的支持。
【问题讨论】:
-
一种可能的解决方案:stackoverflow.com/questions/27914145/…
-
@JustinPihony 谢谢我没有使用 S3 - 所以不清楚该答案是否适用。
-
您能提供一个示例目录布局吗?通配符语法不够吗?例如
textFile(/path/*/*) -
@NickChammas 不,通配符不起作用:它不会下降,并且遇到的任何目录都会生成错误“不是文件”
标签: java apache-spark