化與架構(gòu)變遷指南)
數(shù)據(jù)分析數(shù)據(jù)可視化大數(shù)據(jù)數(shù)據(jù)科學(xué)【免費下載鏈接】vaexOut-of-Core hybrid Apache Arrow/NumPy DataFrame for Python, ML, visualization and exploration of big tabular data at a billion rows per second 項目地址https://gitcode.com/gh_mirrors/va/vaex點擊查看免費下載本文以倉庫根目錄的 CHANGELOG.md 為權(quán)威主線系統(tǒng)梳理 vaex 從 2.3.0 到 4.15.0 的完整演進脈絡(luò)Apache Arrow 深度集成、Out-of-Core 懶加載與任務(wù)緩存體系、groupby/join 等高頻操作的性能突破以及 3.0、4.0 兩輪破壞性變更的遷移要點。讀完本文你將理解每個版本背后的設(shè)計動機并能依據(jù)版本差異評估升級風(fēng)險、針對性使用 materialize、settings、struct.flatten 等新能力。一、倉庫與版本體系概述vaex 是一個 Out-of-Core 的混合 Apache Arrow/NumPy DataFrame 庫面向 Python 大規(guī)模表格數(shù)據(jù)的機器學(xué)習(xí)、可視化和探索官方定位為每秒處理十億行。當(dāng)前倉庫采用多包架構(gòu)核心模塊包括包名目錄定位vaex-corepackages/vaex-core/vaex/核心引擎DataFrame、表達(dá)式、聚合、join、groupby、任務(wù)與緩存系統(tǒng)vaex-hdf5packages/vaex-hdf5/vaex/hdf5/HDF5 讀寫與導(dǎo)出vaex-vizpackages/vaex-viz/vaex/viz/matplotlib/contour 等可視化vaex-mlpackages/vaex-ml/vaex/ml/與 scikit-learn、XGBoost、TensorFlow 等集成的機器學(xué)習(xí)工具vaex-astropackages/vaex-astro/vaex/astro/天體數(shù)據(jù)FITS、VOTable、Gadget支持vaex-serverpackages/vaex-server/vaex/server/遠(yuǎn)程/分布式 DataFrame 服務(wù)vaex-jupyterpackages/vaex-jupyter/vaex/jupyter/Jupyter 交互式可視化組件CHANGELOG 記錄了 vaex 2.3.02019-10至 4.15.0 的全部變更其中 4.x 系列是 Arrow 深度集成后的主線版本。注意3.x 與 2.x 之間存在一處版本號錯位——vaex 3.1.0 條目下的 vaex-core 被標(biāo)注為 2.0.32020-6-10這是當(dāng)時各子包獨立發(fā)版節(jié)奏的產(chǎn)物閱讀歷史條目時需留意。二、vaex 4.x 時代Apache Arrow 的全面深化2.1 vaex 4.0.02021-03-09Arrow 成為核心依賴4.0.0 是自 3.0 之后的又一次大規(guī)模架構(gòu)升級CHANGELOG 明確列出的 Breaking changes 包括Arrow 成為核心依賴vaex-arrow 包被廢棄deprecated所有返回字符串的方法現(xiàn)在返回 Arrow 數(shù)組#517。打開.arrow文件時數(shù)組以 Apache Arrow 數(shù)組而非 NumPy 數(shù)組形式暴露#984。列訪問df.column[x]可能返回ColumnProxy而非原始數(shù)據(jù)需要切片[:]或用.to_numpy()/.to_arrow()/np.array(...)/pa.array(...)轉(zhuǎn)換#993。所有繪圖方法遷移到df.vizaccessor#923。同版本的架構(gòu) Refactor 有兩個關(guān)鍵點DataFrame 與 Dataset 分離#865——DataFrame 是面向用戶的邏輯視圖Dataset 負(fù)責(zé)底層數(shù)據(jù)存儲與 chunk 迭代字符串函數(shù)改用arrow.compute內(nèi)核#885這是性能提升的底層來源。此外還引入Out-of-Core Parquet 支持Arrow Dataset 掃描#993、Google Cloud Storage 流式讀取#898、dropinf#821、datetime floor#843。concat性能提升約 100 倍#994同時 vaex-distributed 因從未真正可用被廢棄并并入 vaex-enterprise。2.2 vaex 4.54.9哈希、緩存與聚合器大發(fā)展vaex-core 4.5.0關(guān)鍵性能條目Expression.nunique()結(jié)果被緩存#1565。Hashmap 內(nèi)存在線程間共享不再隨線程數(shù)線性增長且免去合并階段hashmap 可高效序列化#1525這在 packages/vaex-core/src/ 下的hash_primitives*.cpp、hash_string.cpp、hash_object.cpp中有對應(yīng)的 C 實現(xiàn)。通過避免 fallback 到 eval 來獲取 dtype提升類型檢查速度#1514。文件創(chuàng)建用 lock 文件保護支持多進程convertTrue協(xié)作#1541、#1573blob 編碼因 blake3 而加速#1575。新增Expression.str.extract可用正則提取字符串片段為 struct#1423。vaex-core 4.9.0聚合器與排序新增聚合器first/last使用不同類型的排序列#1848、skew/kurtosis#1946、list聚合器#1987這些均在 packages/vaex-core/vaex/agg.py 中定義底層 C 實現(xiàn)位于 packages/vaex-core/src/agg_list.cpp、agg_first.cpp、agg_minmax.cpp 等文件。支持按字符串排序、多列排序、多方向排序#1963。df.export支持 JSON#1974。df.groupby先對分組列預(yù)排序以獲得更好性能#1990hashmap 不再拷貝、釋放 GIL#1893、#1961字符串以 Arrow 數(shù)組存入 hashmap使map.key_array()更快#1976。2.3 vaex 4.104.15describe、struct 與 Arrow 生態(tài)收官vaex-core 4.10.0新增vaex.agg.describe聚合器及groupby(...).describe(...)#2004df.struct.flatten將 Arrow struct 拆成多列#2072isin 復(fù)用 hashmap指紋穩(wěn)定利于緩存#2089value_counts改為 task 以獲得緩存支持#2085。vaex-core 4.11.x修復(fù)空 DataFrame 切片#2129join 在缺失值時的問題#808修正$VAEX_PATH_HOME→$VAEX_PATH環(huán)境變量#2101新增dropna/dropinf等用法文檔#2104。vaex-core 4.13.0落地Apache Arrow CSV reader 的 Out-of-Core懶加載與常規(guī) CSV 支持#1028同時支持 pandas 與 arrow 的壓縮 CSV 讀取暴露vaex.DataFrame與vaex.Expression類型用于 typing#2186。vaex-core 4.14.0export_many支持 Arrow CSV 導(dǎo)出后端#2220懶加載 CSV 讀取自動檢測類型#2224。vaex-core 4.15.0materialize允許傳入單列或表達(dá)式#2249selection 中的 Arrow 數(shù)據(jù)不再忽略 null#2196支持用 Arrow string 標(biāo)量構(gòu)建表達(dá)式/過濾器#2244vaex.settings統(tǒng)一管理線程數(shù)#2231。三、核心機制源碼解讀任務(wù)、緩存、指紋與并行4.x 的多數(shù)性能條目都圍繞任務(wù)系統(tǒng) 緩存 指紋展開它們是 vaex 每秒十億行的基石。3.1 任務(wù)系統(tǒng)與執(zhí)行器vaex-core 2.0.0 起任務(wù)系統(tǒng)重構(gòu)任務(wù)在 CPU 上執(zhí)行、更易反序列化數(shù)據(jù)結(jié)構(gòu)的編碼更靈活支持二進制 blob 與 JSON 在線傳輸#557并支持 async/await#654。4.8.0 又調(diào)整默認(rèn)同步執(zhí)行路徑不再使用 asyncio并讓執(zhí)行器支持多任務(wù)異步、提供 auto execute 上下文管理器#1783、#1784、#1785。相關(guān)實現(xiàn)見 packages/vaex-core/vaex/execution.py、tasks.py。3.2 指紋fingerprint與多級緩存4.3.0 引入df.fingerprint()——一個跨運行時的唯一緩存鍵并支持 Redis 與 diskcache 緩存任務(wù)結(jié)果#1393、#1287。4.6.0 起指紋在DataFrame 變化但任務(wù)描述不變時保持穩(wěn)定以提升緩存命中#1627并引入多級緩存如內(nèi)存 磁盤#1580。4.9.0 修復(fù)了過濾器使用虛擬列導(dǎo)致指紋沖突的隱患#19494.10.0 讓 isin 復(fù)用 hashmap 從而指紋穩(wěn)定#2089。指紋與緩存的實現(xiàn)集中在 packages/vaex-core/vaex/cache.py、dataset.pyC 側(cè) hashmap 見 packages/vaex-core/src/hash.hpp 與各hash_*.cpp。3.3 線程、進程與 GIL4.8.0 將互斥鎖移入 C 層避免 GIL 問題#1847并重構(gòu)提升整體性能#1863、#1869。4.9.0 減少 multiprocessing 進程數(shù)#1979。4.15.0 讓線程數(shù)統(tǒng)一走vaex.settings#2231。在 packages/vaex-core/vaex/settings.py 中可看到默認(rèn)值邏輯thread_count默認(rèn)multiprocessing.cpu_count()thread_count_io默認(rèn)thread_count 1process_count默認(rèn)等于thread_count這些字段可通過環(huán)境變量VAEX_NUM_THREADS、VAEX_NUM_THREADS_IO覆蓋整個 settings 結(jié)構(gòu)支持從$VAEX_HOME/main.yml加載。四、groupby、join 與聚合的性能演進路線4.1 groupby從 2x 到 250x版本變更效果vaex-core 2.0.0groupby 重構(gòu)2x4x 提速#730vaex-core 2.0.3isin 用 hashmap基本類型 2x4x、字符串場景最高 200x#822vaex-core 4.2.0稀疏化 groupby更低內(nèi)存占用最高 250x 提速#1381新增排序 groupby#1339vaex-core 4.6.0支持常規(guī) bins 分組、受限 value 數(shù)與 OTHERS對齊 binby#1589、#1641新增vaex.agg.any/all#1630vaex-core 4.9.0預(yù)排序分組列更優(yōu)性能#1990sparse groupby 的 C 側(cè)實現(xiàn)可在 packages/vaex-core/src/binner_hash.cpp、binner_combined.cpp 中查看groupby.describe的快捷入口位于 packages/vaex-core/vaex/groupby.py其實現(xiàn)等價于df.groupby(pclass).agg({age: vaex.agg.describe(age)}).struct.flatten()輸出age_count、age_count_na、age_mean、age_std、age_min、age_max等列。4.2 join缺失值處理是持久戰(zhàn)役join 相關(guān)的修復(fù)貫穿多個版本CHANGELOG 記錄2.0.0右表僅有 join 列時 join 失敗、名稱沖突、虛擬列與變量處理修復(fù)#570、#573、#2010。2.0.1右表缺失左表值時罕見情況下指向 row 0的修復(fù)#765。4.2.0join 支持 datetime 列。4.9.x、4.10.0、4.11.0連續(xù)修復(fù)缺失值/nan 導(dǎo)致的 join 問題#2077、#808。join 的 Python 層實現(xiàn)在 packages/vaex-core/vaex/join.pyC 哈希與字符串處理在 packages/vaex-core/src/ 的hash_string.cpp、string_utils.cpp等文件中。4.3 聚合器生態(tài)除了skew、kurtosis、describe、list、first/last、any/all4.x 還新增了percentile_approx進度條#1889、unique/nunique的limit與limit_raise#1801、nunique對數(shù)字列帶 selection 時錯誤結(jié)果的修復(fù)#2199。聚合器的完整清單見 packages/vaex-core/vaex/agg.py對應(yīng) C 內(nèi)核在 packages/vaex-core/src/agg_*.cpp。五、CSV 讀取與 Out-of-Core 懶加載實戰(zhàn)CHANGELOG 中 CSV 能力是 4.134.15 的重點核心 API 為vaex.from_csv_arrow定義于 packages/vaex-core/vaex/init.pyimport vaex # 常規(guī)非懶加載讀取 df vaex.from_csv_arrow(data.csv) # Out-of-Core 懶加載不將數(shù)據(jù)全部載入內(nèi)存按塊讀取 df vaex.from_csv_arrow(huge.csv, lazyTrue, chunk_size10MiB, # 每塊讀取大小默認(rèn) 10MiB newline_readahead64kiB, # 換行探測預(yù)讀緩沖默認(rèn) 64kiB schema_infer_fraction0.01) # 用于推斷 schema 的文件比例默認(rèn) 1%lazyTrue時返回基于 packages/vaex-core/vaex/csv.py 中DatasetCsvLazy的 DataFramelazyFalse時用DatasetCsv全量讀取。三個 options 直接透傳 PyArrow 的ReadOptions/ParseOptions/ConvertOptions可精細(xì)控制列類型推斷、null 值處理、塊大小。4.14.0 的自動檢測類型#2224讓懶加載讀取時無需手動指定 schema。傳統(tǒng)vaex.from_csv則保留 pandas 后端路徑packages/vaex-core/vaex/init.py支持chunk_size分塊迭代與大文件convertTrue轉(zhuǎn) HDF5默認(rèn) 5M 行/塊約 1GB 內(nèi)存需雙倍磁盤空間。六、materialize 與內(nèi)存/性能取舍materialize是 4.6.0 引入的將數(shù)據(jù)集列物化為原生 CPU 格式的能力#1625對非內(nèi)存映射文件如 parquet尤其重要。源碼見 packages/vaex-core/vaex/dataframe.pydf vaex.open(somewhatslow.parquet) df.x.sum() # 慢每次都要解碼 parquet 塊 df df.materialize() # 將真實列緩存到內(nèi)存 df.x.sum() # 首次調(diào)用填緩存仍慢 df.x.sum() # 之后走內(nèi)存速度最快要點materialize(columnNone, inplaceFalse)column接受列名或表達(dá)式4.15.0 起支持單個列/表達(dá)式#2249為 None 時物化全部列含隱藏列inplaceTrue時原地修改。虛擬列會被立即evaluate并轉(zhuǎn)為真實列通過DatasetArrays真實列則包裝進DatasetCached首次訪問時緩存。4.15.0 還修復(fù)了df.extract()的線程安全問題#2182并在無法執(zhí)行時拋出更明確的異常#22324.15 前 materialize 只接受虛擬列名列表。需要警惕materialize可能占用大量內(nèi)存源碼 docstring 中明確警告。七、selections、過濾與缺失值處理7.1 selection 相關(guān)修復(fù)2.4.0/2.5.0表達(dá)式針對過濾數(shù)據(jù)與 selection 不重復(fù)求值#483、#496、#505過濾與 selection 支持布爾自動廣播實現(xiàn)條件過濾#489。4.1.0df.extract()改用 mask 而非 indicescommit 398b682f。4.9.0按布爾列過濾時正確記錄列依賴#2016。4.13.0修復(fù)過濾 DataFrame 的負(fù)索引#2163。4.15.0Arrow 數(shù)據(jù)用于 selection 時不再忽略 null 或失敗#2196selection-dropna支持非標(biāo)識符表達(dá)式#2208。selections 的實現(xiàn)位于 packages/vaex-core/vaex/selections.py過濾在 dataframe.py 的filter相關(guān)方法中。7.2 dropna / dropinf / fillna4.0.0 新增dropinf#821。4.8.0 修復(fù)fillna/fillmissing在需要時對整數(shù)列向上轉(zhuǎn)型#1869。4.11.0 補充 dropna/dropinf 等方法的文檔說明#2104。八、vaex 3.0破壞性變更與遷移清單vaex 3.0.02020-05-24是一次面向 Python 3 的現(xiàn)代化CHANGELOG 列出的 Breaking changes 對升級者影響重大放棄 Python 2DataFrame 內(nèi)部改用普通 dict要求 Python ≥ 3.6。變量不再能訪問pi和e常量。df.rename_column改為df.rename同時重命名變量。繪圖等默認(rèn) limits 變?yōu)?minmax避免遺漏離群點。df.get_column_names()返回別名非法標(biāo)識符名傳aliasFalse取內(nèi)部列名。df.export/to_dict/to_items/to_arrays的virtual默認(rèn)值為 True。df.dtype變?yōu)閷傩员磉_(dá)式數(shù)據(jù)類型用df.data_type()df.expr.dtype行為不變。df.categorize接受min_value/max_value不再需要check參數(shù)labels 不必是字符串新增inplace參數(shù)。vaex.open/from_csv默認(rèn)不再拷貝 pandas index#756。vaex-core 2.0.02020-05-24作為 vaex 3.0 的配套核心還完成打印 DataFrame 單次 evaluate#571、join 2x 提速與更低內(nèi)存#586、按列 dtypeobject 時更快的類型檢查#612、DataFrame/Executor 線程安全支持 Dash/Flask#670、percentile_approx支持百分比序列#527、polygon 測試?yán)?geo/geojson#685、dt.quarter與dt.strftime#682。九、子包版本節(jié)奏與配套生態(tài)演進CHANGELOG 同時記錄了各子包的獨立發(fā)版便于排查兼容性問題vaex-hdf50.12.0 支持在 HDF5 中存儲 Arrow Dictionary 編碼categorical#18140.13.0 需 vaex-core 4.13.0dataset 重構(gòu)0.14.0 用 null bitmask 在 HDF5 中存 Arrow 數(shù)組#22450.12.2 關(guān)閉 HDF5 文件時不持有 NumPy 數(shù)組引用#20660.10.0 支持寫高維數(shù)組#1563。vaex-viz0.5.4 修正 matplotlib 3.6.0 下 colorbar 位置#22150.5.3 改善 histogram 的 selection 行為#2143。vaex-astro0.9.2 修復(fù) eq2gal 拼寫#2206。vaex-ml0.18.0 支持 metrics 中使用 selections#20730.17.0 依賴vaex.datasets.iris()0.16 起依賴統(tǒng)一 settings需 vaex-core 4.70.15 起 dot product 用專用函數(shù)0.14.0 新增 MultiHotEncoder 與多種 ML metrics0.13.0 支持 TensorFlow/keras#15100.12.0 集成 River、隨機投影、增量 PCA。vaex-server0.6.0 用 FastAPI 完全重構(gòu)#13000.8.1 兼容 Python 3.6。vaex-jupyter0.5.1 提供 selection toggle list0.7.0 提供 settings 編輯組件。vaex-contrib0.1.0 支持 Google BigQuery 導(dǎo)入導(dǎo)出#1470代碼在 packages/vaex-contrib/vaex/contrib/io/gbq.py。十、依賴、環(huán)境與構(gòu)建事項Python 版本4.0.0 起 Arrow 為核心依賴vaex-core 4.8.0 為避免 segfault 有意避開 frozendict 2.2.0Python 3.6#1856vaex-server 0.8.1 兼容 Python 3.6。OSX Metalvaex-core 4.6.0 支持 Metal 加速表達(dá)式 jit#5844.11.0 提供 osx arm wheel#2124。blake34.5.0 用于加速 blob 編碼#15754.8.0 修復(fù) blake3 兼容問題#1818。構(gòu)建系統(tǒng)4.8.0 起使用 cmake/scikit-build#1847參考 packages/vaex-core/CMakeLists.txt。環(huán)境變量VAEX_NUM_THREADS、VAEX_NUM_THREADS_IO控制計算/IO 線程packages/vaex-core/vaex/settings.py$VAEX_HOME/main.yml可集中配置packages/vaex-core/vaex/settings.py4.8.0 起鎖文件位于$VAEX_HOME/lock#1797注意 4.11.0 將$VAEX_PATH_HOME更正為$VAEX_PATH#2101。十一、如何繼續(xù)深入核心 DataFrame API 與實現(xiàn)packages/vaex-core/vaex/dataframe.py聚合器定義packages/vaex-core/vaex/agg.py分組、連接、滾動窗口packages/vaex-core/vaex/groupby.py、join.py、rolling.pyC 加速內(nèi)核packages/vaex-core/src/hash、agg、binner、strings測試印證CHANGELOG 中多數(shù)修復(fù)均有對應(yīng)回歸測試如 tests/groupby_test.py、tests/join_test.py、tests/unique_test.py、tests/from_csv_test.py 等可用于驗證本文所述行為在當(dāng)前版本中的實際表現(xiàn)。贊分享數(shù)據(jù)分析數(shù)據(jù)可視化大數(shù)據(jù)數(shù)據(jù)科學(xué)【免費下載鏈接】vaexOut-of-Core hybrid Apache Arrow/NumPy DataFrame for Python, ML, visualization and exploration of big tabular data at a billion rows per second 項目地址https://gitcode.com/gh_mirrors/va/vaex點擊查看免費下載相關(guān)推薦Botkit 版本演進全解析從 0.x 到 4.15 的核心特性變遷與源碼解讀Botkit 版本演進全解析從 0.x 到 4.15 的核心特性變遷與源碼解讀 導(dǎo)讀 本文以倉庫根目錄的 changelog.md https://link后端即時通訊Argos Translate 版本演進全解析從 1.0 到 1.10 的核心能力與架構(gòu)變遷Argos Translate 版本演進全解析從 1.0 到 1.10 的核心能力與架構(gòu)變遷 本文以官方發(fā)布說明 ReleaseNotes.md https:人工智能NLP本地部署tsfresh 版本演進全解析從 0.1.0 到 0.21.2 的核心功能變遷、破壞性變更與升級指南tsfresh 版本演進全解析從 0.1.0 到 0.21.2 的核心功能變遷、破壞性變更與升級指南 tsfreshTime Series Feature特征工程機器學(xué)習(xí)數(shù)據(jù)分析上一篇next-learn路由優(yōu)化SEO友好的路由結(jié)構(gòu)下一篇Loose Leaf 第三方服務(wù)集成教程社交分享與數(shù)據(jù)分析一鍵配置創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考