Dask to_parquet抛出异常"No such file or directory"



下面的Dask代码尝试将数据帧存储在镶木地板中,再次读取它,添加一列,然后再次存储添加了列的数据帧。

这是代码:

import pandas as pd
import dask.dataframe as dd
pdf = pd.DataFrame({
'height': [6.21, 5.12, 5.85],
'weight': [150, 126, 133]
})
ddf = dd.from_pandas(pdf, npartitions=3) 
ddf.to_parquet('C:\temp\test3', engine='pyarrow', overwrite=True)
ddf2 = dd.read_parquet('C:\temp\test3') 
ddf2['new_column'] = 1
ddf2.to_parquet('C:\temp\test3', engine='pyarrow', overwrite=True) # <- this one fails

我得到的错误是:

FileNotFoundError: [Errno 2] No such file or directory: 'C:/temp/test3/part.0.parquet'

如果我检查目录temp3为空。

我认为,当执行第二个to_parquet时,由于overwrite=True,它做了一个隐含的compute(),过程从read_parquet开始,但由于overwrite删除了文件,它找不到它。是这样吗?

无论如何,如何使其发挥作用?请注意,在实际场景中,数据帧不适合内存。

更新

我没有试图更新镶木地板文件,我需要重新编写它,覆盖现有的文件。

这很有效,在执行to_parquet时使用不同的文件名,然后删除旧的镶木地板目录:

ddf = dd.from_pandas(pdf, npartitions=3) 
ddf.to_parquet('C:\temp\OLD_FILE_NAME', engine='pyarrow', overwrite=True)
ddf2 = dd.read_parquet('C:\temp\OLD_FILE_NAME') 
ddf2['new_column'] = 1
ddf2.to_parquet('C:\temp\NEW_FILE_NAME', engine='pyarrow', overwrite=True)
path_to_delete = os.path.dirname('C:\temp\OLD_FILE_NAME\') 
shutil.rmtree(path_to_delete)

相关内容

最新更新