簡體   English   中英

從 s3 存儲桶中讀取許多小文件

[英]Reading many small files from an s3 bucket

我有幾千個 csv,每個都非常小。

現在我正在使用 for 循環遍歷文件並使用 pandas.read_csv()。 與實際下載速度和文件大小相比,這非常慢。

我懷疑引擎蓋下有很多開銷,比如打開連接。

有什么辦法可以使這種方法更有效率嗎?

如果您可以訪問更多 AWS 服務,您可以做什么

主要問題是通過互聯網獲取數以千計的小文件效率不高。 以某種方式壓縮這些文件然后處理更大的文件會更有效率。

您可以在 Glue 數據目錄中創建一個表,指向 S3 中文件的位置和結構,並使用 Athena 執行select * from table_name Athena 將讀取所有小文件並在 S3 上您選擇的位置輸出 CSV,您只需為讀取的數據量付費。

如果您僅限於使用 Python 腳本,您可以做什么

我懷疑您的代碼存在嚴重的 IO 瓶頸,即它大部分時間都在等待來自 S3 的響應,而不是實際計算某些東西。 您可以通過並行化來自 S3 的讀取操作來優化這一點。

鑒於您的 I/O 有限,我將研究aioboto3 ,它允許您在 Python 中使用 async/await 進行 AWS SDK 調用。 它應該非常適合這個用例。 開始可能有點煩人,但如果您有興趣,我最近寫了一篇關於該主題的博客文章(通常的免責聲明:由我撰寫,與主題相關)。

如果您想堅持使用標准庫,您可能會對多處理和線程模塊感興趣。 如果瓶頸是 CPU 時間而不是 I/O,這些通常會更好。

暫無
暫無

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

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