好影片推薦 — 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 各種方法提升處理速度的方法,這些方法包含:
- 換 Interpreter, 例如 Pypy
- 用 multi-processing 利用多核心 CPU 分散處理
- 用 mmap 增加讀取效率
- 使用不同數值的型別改善計算效率
- 使用 Polars, DuckDB
從最原始的讀取檔案並逐行處理的 9 分鐘,一路改善到約 9.4 秒!相當有趣!
最驚訝的是 9.4 秒竟然是只有用 Python + DuckDB 而已!
所以,影片作者最後相當推薦用 DuckDB 這類 in-memory OLAP database 做 data processing 的工作,不僅效率好、速度快,還容易寫!雖然 1.5 秒還是比 Java 慢,但對比 Python + DuckDB 所帶來的易用性、彈性以及開發速度,還是相當值得的。
人生苦短,我用 Python。