Concat Avro файлы с использованием avro-tools
Я пытаюсь объединить файлы AVRO в один большой файл, проблема в concat
команда не принимает подстановочный знак
hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro
Я получил:
Исключение в потоке "main" java.io.FileNotFoundException: файл не существует: /input/part*
Я пытался использовать ""
а также ''
но нет шансов.
1 ответ
Я быстро проверил исходный код Avro (1.7.7), и кажется, что concat не поддерживает шаблоны glob (в основном, они вызывают FileSystem.open()
на каждый аргумент, кроме последнего).
Это означает, что вы должны явно указать все имена файлов в качестве аргумента. Это громоздко, но следующая команда должна делать то, что вы хотите:
IN=$(hadoop fs -ls /input/part* | awk '{printf "%s ", $NF}')
hadoop jar avro-tools.jar concat ${IN} /output/bigfile.avro
Было бы неплохо добавить в эту команду поддержку шаблона glob.
Вместо того hadoop jar avro-tools.jar
можно бежать java -jar avro-tools.jar
, так как для этой операции вам не нужен хадуп.