如何在pyarrow中设置existing_data_behavior解决write_dataset写入报错?
pyarrow write_dataset 非空目录写入报错解决方案
报错原因
pyarrow.lib.ArrowInvalid: Could not write to
as the directory is not empty and existing_data_behavior is to error
该报错是write_dataset的默认安全机制触发:默认existing_data_behavior参数值为error,只要写入目标目录存在非空内容就会抛出异常,避免误操作覆盖已有数据。
existing_data_behavior 可选参数说明
existing_data_behavior支持三个合法取值,分别对应不同的写入行为:
error:默认值,目标目录非空时直接抛出异常,阻断写入操作overwrite_or_ignore:仅覆盖本次写入产生的同名文件,目录内其他原有文件会全部保留,适合增量写入、追加写入的场景delete_matching:写入前先删除目标目录下和本次写入的数据集分区规则匹配的所有文件,再写入新数据,不会删除目录内不符合分区规则的无关文件,是安全的分区全量更新选项
参数设置示例
全量更新匹配分区内容
import pyarrow.dataset as ds # 替换为你实际要写入的表对象、输出路径、文件格式 ds.write_dataset( data=your_data_table, base_dir="<my-output-dir>", format="parquet", existing_data_behavior="delete_matching" )
增量写入不删除原有文件
ds.write_dataset( data=your_data_table, base_dir="<my-output-dir>", format="parquet", existing_data_behavior="overwrite_or_ignore" )
补充说明
如果你需要完全清空整个输出目录后再写入,可以先手动删除目标目录下所有内容,再执行写入操作,避免无关残留文件影响后续数据读取。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

