簡體   English   中英

如何快速將大型CSV文件讀入Python?

[英]How can I read a large CSV file into Python with speed?

我正在嘗試將〜67 gb數據幀(6,000,000個特征乘以2300行)加載到dask中以進行機器學習。 我正在AWS上使用96核心機器,希望將其用於實際機器學習。 但是,Dask在單個線程中加載CSV。 它已經用了整整24小時,還沒有加載。

#I tried to display a progress bar, but it is not implemented on dask's load_csv
from dask.diagnostics import ProgressBar
pbar = ProgressBar()
pbar.register()

df = dd.read_csv('../Larger_than_the_average_CSV.csv')

有沒有更快的方法可以將其加載到Dask中並使其持久化? 我應該切換到其他技術(Scala上的Spark還是PySpark?)

Dask可能仍在加載它,因為我可以看到top CPU使用率穩定達到100%。

您在問題中顯示的代碼可能根本不需要時間,因為您實際上並沒有加載任何東西,只是設置了工作處方。 這需要多長時間取決於您指定的塊大小。

實際加載要考慮兩個主要瓶頸:

  • 將數據從光盤放入內存,通過單個光盤接口傳輸原始數據,
  • 將該數據解析為內存中的內容

如果您在本地磁盤上,則對於前者您無能為力,並且您希望它只是一小部分。

即使默認情況下dask會在多個線程中執行,后者也可能會受到GIL的影響(這就是為什么它可能只顯示使用一個線程的原因)。 您最好閱讀有關不同調度程序的簡要文檔,並且即使您位於一台計算機上,也要混合使用線程和進程,並且應該嘗試使用分布式調度程序。

最后,您可能根本不想“加載”數據,而是對其進行處理。 是的,您可以根據需要將Dask保留到內存中( dask.persist ,很有趣),但是請不要使用太多的工作程序來加載數據,這樣您就可以將其放入客戶端進程內存中的Pandas數據幀中。

暫無
暫無

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

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