有效合并大镶木地板文件

问题描述 投票:0回答:2

我正在使用 parquet-tools 来合并 parquet 文件。但 parquet-tools 似乎需要与合并文件一样大的内存。我们是否有其他方法或 parquet-tools 中的可配置选项来更有效地使用内存?因为我在 hadoop env 上将合并作业作为映射作业运行。并且容器每次都会被杀死,因为它使用的内存比提供的内存多。

谢谢你。

hadoop parquet
2个回答
4
投票

我不建议使用 parquet-tools merge,因为它只是将行组一个接一个地放置,所以您仍然会有小组,只是打包在一个文件中。生成的文件通常不会具有明显更好的性能,并且在某些情况下它甚至可能比单独的文件性能更差。详情请参阅PARQUET-1115

目前合并 Parquet 文件的唯一正确方法是读取其中的所有数据并将其写入新的 Parquet 文件。您可以使用 MapReduce 作业(需要为此目的编写自定义代码)或使用 Spark、Hive 或 Impala 来完成此操作。


0
投票

尝试一下 joinem,可通过 PyPi 获得:

python3 -m pip install joinem

joinem 提供了一个 CLI,可使用 polars 快速、灵活地串联表格数据。 I/O 是延迟流式传输,以便在处理大量大文件时提供良好的性能。

使用示例

通过标准输入传递输入文件,并将输出文件作为参数传递。

ls -1 path/to/*.parquet | python3 -m joinem out.parquet

您可以添加

--progress
标志来获取进度条。

免安装容器化接口

如果您在 HPC 环境中工作,也可以通过 singularity/apptainer 方便地使用 joinem

ls -1 *.pqt | singularity run docker://ghcr.io/mmore500/joinem out.pqt

更多信息

joinem 还兼容 CSV、JSON 和 Feather 文件类型。 请参阅项目的 README 了解更多使用示例和完整的命令行界面 API 列表。

披露:我是joinem的库作者。

© www.soinside.com 2019 - 2024. All rights reserved.