我已经使用 pyspark 创建了多个 parquet 文件,现在我正在尝试将所有 parquet 文件合并为 1 个。我能够合并这些文件,但是在读取生成的文件时,我遇到了错误。以前有人遇到过这个问题吗?
最佳答案
您不能简单地使用 cat
连接 Parquet 文件,因为它们是在页脚中带有“目录”的二进制文件。要合并两个文件,您必须将它们都读入并写出一个全新的文件。这可以使用 parquet-tools
中的 merge
命令轻松完成。
使用 cat
合并两个 Parquet 文件不起作用的技术背景归结为一个事实,即没有页脚的 Parquet 文件是无用的。每个Parquet文件大致由以下结构组成:
RowGroup(nrows=..)
Column with nrows
Column with nrows
..
RowGroup(nrows=..)
..
..
Footer
Schema (tells you the type of the columns)
total_nrows
Location of RowGroups in the file
如果您cat
将两个文件放在一起,您将只能看到这两个文件的最后一个页脚。此外,如果用于读取文件的库进行一些完整性检查,它会意识到您的文件以某种方式损坏并完全出错。
关于apache-spark - 为什么我不能使用 "cat file1.parquet file2. parquet > result.parquet"合并多个 Parquet 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64739759/