apache-spark - 为什么我不能使用 "cat file1.parquet file2. parquet > result.parquet"合并多个 Parquet 文件?

标签 apache-spark pyspark parquet

我已经使用 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/

相关文章:

pyspark - 如何将 Tableau/BI 工具连接到 Delta Lake? (没有数据 block )

amazon-web-services - s3 桶的默认 block 大小是多少

hadoop - 使用架构文件创建一个 Parquet 支持的 Hive 表

apache-spark - 获取分区 Parquet 数据框的最新模式

python - 比较 Pyspark 中的列

python - 从 Pyspark 中的 RDD 中提取字典

python - 将 RDD 写入 PySpark 中的多个文件

python - 将带有二维数组列的 pandas 数据框保存为 python 中的 Parquet 文件

apache-spark - HDP + ambari + yarn 节点标签和HDFS

apache-spark - Spark DenseVector 的输出转换为 StringType