You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark中如何将压缩Parquet文件扩展名改为.parquet.gz?

解决Spark生成Parquet文件后缀为.gz.parquet改为.parquet.gz的方法

Spark原生写入gzip压缩的Parquet文件时,默认会生成file_name.gz.parquet格式的文件名——这是因为Parquet-MR库的命名逻辑是将压缩格式后缀放在文件格式后缀之前。要改成.parquet.gz,可以通过以下方式实现:

方法一:任务完成后批量重命名文件

这是最直接有效的方案,在Spark任务执行完毕后,通过文件系统命令或代码遍历输出目录,重命名数据文件:

针对HDFS文件系统

用HDFS命令批量处理:

# 单目录下直接重命名
hdfs dfs -mv /your/output/path/*.gz.parquet /your/output/path/*.parquet.gz

# 递归处理分区目录
hdfs dfs -find /your/output/path -name "*.gz.parquet" | while read f; do hdfs dfs -mv "$f" "${f%.gz.parquet}.parquet.gz"; done

针对本地文件系统

用Linux命令快速处理:

find /your/local/path -name "*.gz.parquet" -exec rename 's/\.gz\.parquet$/.parquet\.gz/' {} \;

如果用PySpark,也可以在任务结束后用Python脚本处理:

import os

output_path = "/your/local/output/path"
for root, _, files in os.walk(output_path):
    for file in files:
        if file.endswith(".gz.parquet"):
            old_full_path = os.path.join(root, file)
            new_full_path = os.path.join(root, file.replace(".gz.parquet", ".parquet.gz"))
            os.rename(old_full_path, new_full_path)

方法二:自定义输出格式(不推荐)

如果一定要在Spark写入时直接生成.parquet.gz文件,需要自定义Parquet输出格式类,重写文件名生成逻辑。但这种方式需要修改Spark或Parquet-MR的源码逻辑,复杂度高且易引发兼容性问题,普通场景不建议使用。

注意:重命名时不要改动_SUCCESS、.part-xxxx.crc这类Spark生成的辅助文件,只处理以.gz.parquet结尾的数据文件即可。

内容的提问来源于stack exchange,提问作者Marwan02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:01:25