簡體   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