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
相关产品推荐
相关产品推荐

