好影片推薦 — How Fast can Python Parse 1 Billion Rows of Data?

GitHub 有個名稱為 1brc 的 repository, 這個 repository 其實是 1 項 Java 的挑戰,挑戰大家如何用 Java 在最短的時間處理 1 百萬筆的資料。

這份資料是 1 份記錄各個地區與氣溫的 CSV 檔,欄位只有 2 個,分別是地區名與氣溫,挑戰者必須在最短時間內算出每個地區的最高、最低、平均溫度,目前紀錄保持者是 1.53 秒處理完畢!

各家語言也有相同的挑戰內容(1 Billion Row Challenge),當然被詬病很慢的 Python 也不例外, “How Fast can Python Parse 1 Billion Rows of Data?” 這個影片則是介紹用 Python 各種方法提升處理速度的方法,這些方法包含:

  1. 換 Interpreter, 例如 Pypy
  2. 用 multi-processing 利用多核心 CPU 分散處理
  3. 用 mmap 增加讀取效率
  4. 使用不同數值的型別改善計算效率
  5. 使用 Polars, DuckDB

從最原始的讀取檔案並逐行處理的 9 分鐘,一路改善到約 9.4 秒!相當有趣!

最驚訝的是 9.4 秒竟然是只有用 Python + DuckDB 而已!

所以,影片作者最後相當推薦用 DuckDB 這類 in-memory OLAP database 做 data processing 的工作,不僅效率好、速度快,還容易寫!雖然 1.5 秒還是比 Java 慢,但對比 Python + DuckDB 所帶來的易用性、彈性以及開發速度,還是相當值得的。

人生苦短,我用 Python。

FOLLOW US

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!