Я давно искал способ получить все имена файлов в каталоге и его подкаталогах в файловой системе Hadoop (hdfs).
Я обнаружил, что могу использовать эти команды, чтобы получить его:
sc.hadoopConfiguration.set("mapreduce.input.fileinputformat.input.dir.recursive", "true")
sc.wholeTextFiles(path).map(_._1)
Вот документация "wholeTextFiles":
Чтение каталога текстовых файлов из HDFS, aлокальная файловая система (доступна на всех узлах) или любой URI файловой системы, поддерживаемый Hadoop.Каждый файл читается как отдельная запись и возвращается в паре ключ-значение, где ключ - это путь к каждому файлу, значение - это содержимое каждого файла.
Параметры:
путь - каталог к файлам входных данных, путь может быть разделен запятыми в качестве списка входных данных.
minPartitions - рекомендуемое значение минимального числа разбиения для входных данных.
Возвращает:
СДР, представляющий кортежи пути к файлу и соответствующее содержимое файла
Примечание: Небольшие файлы предпочтительнее, большой файл также допустим, но может привести к снижению производительности., В некоторых файловых системах .../ путь / * может быть более эффективным способом чтения всех файлов в каталоге, чем ... / путь / или ... / путь. Разделение определяется локальностью данных.Это может привести к слишком малому количеству разделов по умолчанию.
Как вы можете видеть, "wholeTextFiles" возвращает пару СДР с именами файлов и их содержимым.Поэтому я попытался отобразить его и взять только имена файлов, но я подозреваю, что он все еще читает файлы.
Причина, по которой я подозреваю, такова: если я пытаюсь считать (например) и получаю искровой эквивалент "Недостаточно памяти »(теряя исполнителей и не в состоянии выполнить задачи).
Я бы предпочел использовать Spark для достижения этой цели самым быстрым способом, однако, если есть другие способы с разумной производительностью, я быбудьте счастливы дать им попытку.
РЕДАКТИРОВАТЬ: Чтобы очистить это - я хочу сделать это с помощью Spark, я знаю, что я могу сделать это с помощью команд HDFS и тому подобное - я хотел бызнать, как это сделать с помощью существующих инструментов, предоставляемых Spark, и, возможно, объяснить, как я могу заставить «wholeTextFiles» не читать сам текст (вроде как преобразования происходят только после действия, а некоторые «команды» никогда недействительно случается).
Большое спасибо!