Кажется, что SparkContext textFile ожидает, что в данной папке будут присутствовать только файлы - это не означает
- (a) recurse или
- (b) даже поддерживать каталоги (пытается читать каталоги в виде файлов)
Любое предложение о том, как структурировать рекурсию - возможно, проще, чем вручную создать рекурсивный список файлов/спуск?
Вот пример использования: файлы под
/данные/таблицы/my_table
Я хочу, чтобы читать через hdfs, вызывать все файлы на всех уровнях каталогов в этом родительском каталоге.
UPDATE
Sc.textFile() вызывает Hadoop FileInputFormat через (подкласс) TextInputFormat. Внутри логики существует рекурсивное чтение каталога - то есть сначала обнаружение, если запись была каталогом, и если да, то спускаться:
<!-- 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 в записи каталога появляются ошибки: "not a file". Такое поведение запутывает - учитывая, что для обработки каталогов необходима надлежащая поддержка.