使用 avro-tools 连接 Avro 文件
Concat Avro files using avro-tools
我正在尝试将 avro 文件合并为一个大文件,问题是 concat
命令不接受通配符
hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro
我得到:
Exception in thread "main" java.io.FileNotFoundException: File does
not exist: /input/part*
我尝试使用 ""
和 ''
但没有机会。
我很快检查了 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 模式的支持将是一个很好的补充。
可以 运行 java -jar avro-tools.jar
而不是 hadoop jar avro-tools.jar
,因为您不需要 hadoop 来进行此操作。
我正在尝试将 avro 文件合并为一个大文件,问题是 concat
命令不接受通配符
hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro
我得到:
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /input/part*
我尝试使用 ""
和 ''
但没有机会。
我很快检查了 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 模式的支持将是一个很好的补充。
可以 运行 java -jar avro-tools.jar
而不是 hadoop jar avro-tools.jar
,因为您不需要 hadoop 来进行此操作。