我有多个小parquet文件作为hive ql作业的输出生成,我想将输出文件合并到单个镶木地板文件?
用一些方法做到最好的方法是什么hdfs or linux commands?
我们曾经使用cat命令合并文本文件,但这对于镶木地板也适用吗?我们可以HiveQL在编写输出文件时自己使用它,比如我们如何使用repartition或使用coalesc方法spark吗?
gia*_*dau 15
根据这个https://issues.apache.org/jira/browse/PARQUET-460 现在你可以下载源代码并编译在merge命令中构建的镶木地板工具.
java -jar ./target/parquet-tools-1.8.2-SNAPSHOT.jar merge /input_directory/
/output_idr/file_name
Run Code Online (Sandbox Code Playgroud)
或者使用https://github.com/stripe/herringbone等工具
dri*_*idk 10
使用鸭数据库:
import duckdb
duckdb.execute("""
COPY (SELECT * FROM '*.parquet') TO 'merge.parquet' (FORMAT 'parquet');
""")
Run Code Online (Sandbox Code Playgroud)
HiveQL如果您的执行引擎是,您也可以自己使用它mapreduce。
您可以为查询设置一个标志,这会导致配置单元在工作结束时合并小文件:
SET hive.merge.mapredfiles=true;
Run Code Online (Sandbox Code Playgroud)
要么
SET hive.merge.mapfiles=true;
Run Code Online (Sandbox Code Playgroud)
如果您的工作是仅地图工作。
这将导致配置单元作业自动将许多小型拼花地板文件合并为较少的大型文件。您可以通过调整hive.merge.size.per.task设置来控制输出文件的数量。如果只想拥有一个文件,请确保将其设置为始终大于输出大小的值。另外,请确保进行相应调整hive.merge.smallfiles.avgsize。如果要确保配置单元始终合并文件,请将其设置为非常低的值。您可以在hive 文档中阅读有关此设置的更多信息。