调用to_parquet()将Dask DataFrame写入parquet出现RuntimeError如何解决
错误产生原因
这个报错是Dask与pyarrow版本间的元数据写入逻辑不兼容导致的,底层是pyarrow写入Parquet文件时,在writer对象未完全关闭的情况下尝试读取元数据触发的运行时错误,前面的ArrowNotImplementedError通常是旧版本pyarrow对某些数据类型/写入参数的支持不完善导致的。
调试&解决方法
第一步:升级依赖库到兼容版本
优先升级dask和pyarrow到匹配的稳定版本,执行命令:pip install --upgrade dask pyarrow # 若使用conda环境则执行 conda update dask pyarrow推荐版本组合:dask >= 2022.02.0,pyarrow >= 8.0.0
第二步:调整to_parquet写入参数
升级完成后如果依然报错,可以关闭全局元数据写入、显式指定pyarrow引擎,修改写入代码为:ddf.to_parquet('saved_data_prqt', compression='snappy', engine='pyarrow', write_metadata_file=False)关闭
write_metadata_file不会影响单个分区文件的写入,仅跳过全局元数据文件的生成,避免触发元数据读取逻辑冲突。第三步:清理残留路径
先删除已存在的saved_data_prqt文件夹,避免之前写入失败的残留损坏文件影响新的写入流程。如果是Windows系统可以替换为绝对路径,避免相对路径权限问题。第四步:替换写入引擎验证
上述操作都无效的话,可以切换为fastparquet引擎写入,先安装依赖:pip install fastparquet再修改写入代码:
ddf.to_parquet('saved_data_prqt', compression='snappy', engine='fastparquet')
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

