![](/img/trans.png)
[英]Why does my code take so long to write CSV file in Dask Python
[英]Why does running compute() on a filtered Dask dataframe take so long?
我正在使用這個讀取數據: ddf1 = dd.read_sql_table('mytable', conn_string, index_col='id', npartitions=8)
當然,由於延遲計算,這會立即運行。 這個表有幾億行。
接下來,我想過濾這個 Dask 數據框:
ddf2 = ddf1.query('some_col == "converted"')
最后,我想將其轉換為 Pandas 數據幀。 結果應該只有大約 8000 行:
ddf3 = ddf2.compute()
但是,這需要很長時間(約 1 小時)。 我能否就如何大幅加快速度獲得任何建議? 我試過使用.compute(scheduler='threads')
,改變分區的數量,但到目前為止都沒有工作。 我究竟做錯了什么?
首先,您可以使用 sqlalchemy 表達式語法對查詢中的過濾器子句進行編碼,並在服務器端進行過濾。 如果數據傳輸是您的瓶頸,那么這就是您的最佳解決方案,尤其是過濾器列已編入索引。
根據您的數據庫后端,sqlalchemy 可能不會釋放 GIL,因此您的分區無法在線程中並行運行。 你得到的只是線程之間的爭用和額外的開銷。 您應該對進程使用 分布式調度程序。
當然,請看看你的CPU和內存使用情況; 使用分布式調度程序,您還可以訪問診斷儀表板。 您還應該關心每個分區在內存中的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.