繁体   English   中英

Dask to_parquet 抛出异常“没有这样的文件或目录”

[英]Dask to_parquet throws exception "No such file or directory"

以下 Dask 代码尝试将 dataframe 存储在 parquet 中,再次读取它,添加一列,然后再次存储添加了该列的 dataframe。

这是代码:

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开始,但是由于覆盖删除了文件,因此找不到它。 是这样吗?

无论如何,如何使这项工作? 请注意,在实际情况下,dataframe 不适合 memory。

更新

我不是要更新镶木地板文件,我需要重新编写它以覆盖现有文件。

这行得通,在执行to_parquet时使用不同的文件名,然后删除旧的 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM