我有多个小的parquet
文件,这些文件是hive ql作业的输出结果,我想将这些输出文件合并成单个parquet
文件。
使用一些hdfs或linux命令
最好的方法是什么?
我们以前使用cat
命令合并文本文件,但对于parquet
文件是否也适用呢?
在写输出文件时,我们是否可以像在spark
中使用repartition
或coalesce
方法那样,使用HiveQL
本身来完成它?
我有多个小的parquet
文件,这些文件是hive ql作业的输出结果,我想将这些输出文件合并成单个parquet
文件。
使用一些hdfs或linux命令
最好的方法是什么?
我们以前使用cat
命令合并文本文件,但对于parquet
文件是否也适用呢?
在写输出文件时,我们是否可以像在spark
中使用repartition
或coalesce
方法那样,使用HiveQL
本身来完成它?
java -jar ./target/parquet-tools-1.8.2-SNAPSHOT.jar merge /input_directory/
/output_idr/file_name
或者使用像https://github.com/stripe/herringbone这样的工具
parquet-tools
,可以在https://hub.docker.com/r/nathanhowell/parquet-tools找到一个包含它的Docker容器。 - David Bodow使用DuckDB:
import duckdb
duckdb.execute("""
COPY (SELECT * FROM '*.parquet') TO 'merge.parquet' (FORMAT 'parquet');
""")
如果您的执行引擎是mapreduce
,您还可以使用HiveQL
本身来完成此操作。
您可以为查询设置一个标志,这会导致Hive在作业结束时合并小文件:
SET hive.merge.mapredfiles=true;
或者
SET hive.merge.mapfiles=true;