[英]Dask dataframe apply giving unexpected results when passing local variables as argument
[英]Passing dask DataFrame as argument to task
最佳實踐是通過Client.submit
將dd.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.