多Parquet文件转单个CSV仅成功转换约10个,求问题排查
多个Parquet转CSV仅部分成功的原因及解决办法
可能的原因
- 无效参数触发异常中断:
ParquetFile(p, sep='\t')中的sep参数是错误的,fastparquet的ParquetFile初始化不接受该参数,执行时会直接抛出异常,导致整个循环终止,后续文件无法继续处理。 - 缺少异常捕获机制:即便没有无效参数,若某份Parquet文件存在格式损坏、内存不足读取失败、权限受限等问题,程序会直接报错停止,无法处理剩余文件。
- 特殊文件干扰:部分Parquet文件可能包含嵌套结构、超大字段,
to_pandas()转换时出现隐性错误,导致循环中断。
修正后的代码
import pandas as pd import glob from fastparquet import ParquetFile path = '.' prqtfiles = glob.glob(path + "/*.parquet") for idx, p in enumerate(prqtfiles): try: # 移除无效的sep参数 pr = ParquetFile(p) df = pr.to_pandas() csv_path = p[:-8] + '.csv' df.to_csv(csv_path, index=False) print(f"成功转换第{idx+1}个文件:{p} -> {csv_path}") except Exception as e: print(f"转换文件{p}失败,错误信息:{str(e)}")
额外优化建议
- 若处理超大Parquet文件,可使用
ParquetFile.iter_row_groups()逐块读取,再追加写入CSV,避免内存溢出。 - 遇到嵌套结构的Parquet文件,需提前将嵌套字段展开(比如用
json_normalize处理字典类型列),再导出CSV,避免格式混乱。
内容的提问来源于stack exchange,提问作者David Ashworth
相关产品推荐
相关产品推荐

