簡體   English   中英

將 dask DataFrame 作為參數傳遞給任務

[英]Passing dask DataFrame as argument to task

最佳實踐是通過Client.submitdd.DataFrame作為參數傳遞給任務,以將需要具體化 dataframe 的工作轉移給工作人員而不是客戶端? 以下似乎可行,但尚不清楚這是否是最佳選擇:

def my_task(ddf: dd.DataFrame) -> None:
    df = ddf.compute()
    ...  # Work requiring the concrete pd.DataFrame

f = client.submit(my_task, ddf)

我能想到的唯一其他替代方法是使用單個分區重新分區,然后運行。

雖然最佳實踐列表中沒有明確提及這一點,但最好按照您指定的方式進行。

想象一個場景,您的客戶端資源很少(例如筆記本電腦),而工作人員擁有大量資源(例如,它們位於 HPC 集群上)。 在這種情況下,將計算結果帶到客戶端甚至可能是不可行的(例如,計算的 dataframe 對於筆記本電腦來說太大了,盡管工作人員可以計算它)。

這是文檔中的相關內容:

避免重復將大量輸入放入延遲調用中 每次傳遞具體結果(任何未延遲的內容)時,Dask 都會默認為它命名。 這是相當快的(大約 500 MB/s),但如果你一遍又一遍地這樣做可能會很慢。 相反,最好也延遲您的數據。 這在使用分布式集群避免為每個 function 調用單獨發送數據時尤其重要。

因此,傳遞 dask 對象(dask 數據幀、延遲、未來等)將最大限度地減少數據傳輸量並避免客戶端資源最少時的潛在問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM