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, так как для этой операции вам не нужен хадуп.

Другие вопросы по тегам