Dask DataFrame删列后保存Parquet报FileNotFoundError问题咨询
Dask 列删除后覆盖保存Parquet触发FileNotFoundError
问题描述
执行dd.to_parquet(data)操作时,若输入的data是通过Dask读取的带指定分区的DataFrame,且保存前执行了删除部分列的操作,会抛出如下报错:
FileNotFoundError: [Errno 2] No such file or directory: part.0.parquet'
该场景在Dask使用过程中并不少见,已有其他开发者遇到过同类问题。
最小复现说明
测试代码可稳定复现两种执行路径的行为差异:
- 从Pandas DataFrame转换生成Dask DataFrame,经列删除操作后保存的流程可正常运行
- 从已落盘的Parquet文件读取Dask DataFrame,经列删除操作后覆盖原路径保存的流程,会触发上述文件不存在的异常
import numpy as np import pandas as pd import dask.dataframe as dd # ------------- # way 1 - works # ------------- print('way 1 - start') A = np.random.rand(200,300) cols = np.arange(0, A.shape[1]) cols = [str(col) for col in cols] df = pd.DataFrame(A, columns=cols) ddf = dd.from_pandas(df, npartitions=11) # compute and resave ddf.drop(cols[0:11], axis=1) dd.to_parquet( ddf, 'error.parquet', engine='auto', compression='default', write_index=True, overwrite=True, append=False) print('way 1 - end') # ---------------------- # way 2 - does NOT work # ---------------------- print('way 2 - start') ddf = dd.read_parquet('error.parquet') # compute and resave ddf.drop(cols[0:11], axis=1) dd.to_parquet( ddf, 'error.parquet', engine='auto', compression='default', write_index=True, overwrite=True, append=False) print('way 2 - end')
内容的提问来源于stack exchange,提问作者GMc
相关产品推荐
相关产品推荐

