У меня есть путь к папке HDFS, как показано ниже.
sampleFolder / b / c / file1.orc \ n sampleFolder / d / file2.orc \ n sampleFolder / d / file3.orc
Я хочу получить количество файлов и папок по пути HDFS «sampleFolder». Ожидаемый результат должен быть 6 (т.е. папка b, папка c, папка d, file1.orc, file2.orc и file3.orc). Но всегда отображается только количество файлов, а не количество папок.
Я пытаюсь выполнить код ниже, но всегда получаю вывод как
Файл Количество файлов: 3
sHiveFilePath - hdfs: //10.1.1.1: 8020 / sampleFolder.
Может кто-нибудь направить?
RemoteIterator<LocatedFileStatus> ri = hdfs.listFiles(sHiveFilePath, true);
LocatedFileStatus current = null;
while (ri.hasNext()) {
current = ri.next();
if (current.isFile()) {
System.out.println("File");
System.out.println("FileCount: " + fileCount++);
}
if (current.isDir()){
System.out.println("Directory");
System.out.println("Dir Count: " + fileCount++);
}
}
Спасибо за исправление. Да, «a» - это «SampleFolder». Я исправил это в исходном вопросе. Я выполняю рекурсивную операцию. В выражении "hdfs.listFiles (sHiveFilePath, true);" истина означает рекурсивную операцию. Пожалуйста, порекомендуйте.
listFiles не перечисляет папки, только файлы внутри папок. Если вы также хотите перечислить папки, используйте вместо этого listStatus.




Вероятно, вы хотели выполнить рекурсию и добавить счетчик из подпапок. Вы этого не делаете. Кроме того, разве
hdfs://10.1.1.1:8020/aне должен бытьhdfs://10.1.1.1:8020/sampleFolder? Что показываетhdfs dfs -ls hdfs://10.1.1.1:8020/a?