ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

vaex 版本演进全解析:从 2.3 到 4.15 的核心功能、性能优化与架构变迁指南

vaex 版本演进全解析:从 2.3 到 4.15 的核心功能、性能优化与架构变迁指南 数据分析数据可视化大数据数据科学【免费下载链接】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 为权威主线系统梳理 vaex 从 2.3.0 到 4.15.0 的完整演进脉络Apache Arrow 深度集成、Out-of-Core 懒加载与任务缓存体系、groupby/join 等高频操作的性能突破以及 3.0、4.0 两轮破坏性变更的迁移要点。读完本文你将理解每个版本背后的设计动机并能依据版本差异评估升级风险、针对性使用 materialize、settings、struct.flatten 等新能力。一、仓库与版本体系概述vaex 是一个 Out-of-Core 的混合 Apache Arrow/NumPy DataFrame 库面向 Python 大规模表格数据的机器学习、可视化和探索官方定位为每秒处理十亿行。当前仓库采用多包架构核心模块包括包名目录定位vaex-corepackages/vaex-core/vaex/核心引擎DataFrame、表达式、聚合、join、groupby、任务与缓存系统vaex-hdf5packages/vaex-hdf5/vaex/hdf5/HDF5 读写与导出vaex-vizpackages/vaex-viz/vaex/viz/matplotlib/contour 等可视化vaex-mlpackages/vaex-ml/vaex/ml/与 scikit-learn、XGBoost、TensorFlow 等集成的机器学习工具vaex-astropackages/vaex-astro/vaex/astro/天体数据FITS、VOTable、Gadget支持vaex-serverpackages/vaex-server/vaex/server/远程/分布式 DataFrame 服务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 被标注为 2.0.32020-6-10这是当时各子包独立发版节奏的产物阅读历史条目时需留意。二、vaex 4.x 时代Apache Arrow 的全面深化2.1 vaex 4.0.02021-03-09Arrow 成为核心依赖4.0.0 是自 3.0 之后的又一次大规模架构升级CHANGELOG 明确列出的 Breaking changes 包括Arrow 成为核心依赖vaex-arrow 包被废弃deprecated所有返回字符串的方法现在返回 Arrow 数组#517。打开.arrow文件时数组以 Apache Arrow 数组而非 NumPy 数组形式暴露#984。列访问df.column[x]可能返回ColumnProxy而非原始数据需要切片[:]或用.to_numpy()/.to_arrow()/np.array(...)/pa.array(...)转换#993。所有绘图方法迁移到df.vizaccessor#923。同版本的架构 Refactor 有两个关键点DataFrame 与 Dataset 分离#865——DataFrame 是面向用户的逻辑视图Dataset 负责底层数据存储与 chunk 迭代字符串函数改用arrow.compute内核#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哈希、缓存与聚合器大发展vaex-core 4.5.0关键性能条目Expression.nunique()结果被缓存#1565。Hashmap 内存在线程间共享不再随线程数线性增长且免去合并阶段hashmap 可高效序列化#1525这在 packages/vaex-core/src/ 下的hash_primitives*.cpp、hash_string.cpp、hash_object.cpp中有对应的 C 实现。通过避免 fallback 到 eval 来获取 dtype提升类型检查速度#1514。文件创建用 lock 文件保护支持多进程convertTrue协作#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 实现位于 packages/vaex-core/src/agg_list.cpp、agg_first.cpp、agg_minmax.cpp 等文件。支持按字符串排序、多列排序、多方向排序#1963。df.export支持 JSON#1974。df.groupby先对分组列预排序以获得更好性能#1990hashmap 不再拷贝、释放 GIL#1893、#1961字符串以 Arrow 数组存入 hashmap使map.key_array()更快#1976。2.3 vaex 4.104.15describe、struct 与 Arrow 生态收官vaex-core 4.10.0新增vaex.agg.describe聚合器及groupby(...).describe(...)#2004df.struct.flatten将 Arrow struct 拆成多列#2072isin 复用 hashmap指纹稳定利于缓存#2089value_counts改为 task 以获得缓存支持#2085。vaex-core 4.11.x修复空 DataFrame 切片#2129join 在缺失值时的问题#808修正$VAEX_PATH_HOME→$VAEX_PATH环境变量#2101新增dropna/dropinf等用法文档#2104。vaex-core 4.13.0落地Apache Arrow CSV reader 的 Out-of-Core懒加载与常规 CSV 支持#1028同时支持 pandas 与 arrow 的压缩 CSV 读取暴露vaex.DataFrame与vaex.Expression类型用于 typing#2186。vaex-core 4.14.0export_many支持 Arrow CSV 导出后端#2220懒加载 CSV 读取自动检测类型#2224。vaex-core 4.15.0materialize允许传入单列或表达式#2249selection 中的 Arrow 数据不再忽略 null#2196支持用 Arrow string 标量构建表达式/过滤器#2244vaex.settings统一管理线程数#2231。三、核心机制源码解读任务、缓存、指纹与并行4.x 的多数性能条目都围绕任务系统 缓存 指纹展开它们是 vaex 每秒十亿行的基石。3.1 任务系统与执行器vaex-core 2.0.0 起任务系统重构任务在 CPU 上执行、更易反序列化数据结构的编码更灵活支持二进制 blob 与 JSON 在线传输#557并支持 async/await#654。4.8.0 又调整默认同步执行路径不再使用 asyncio并让执行器支持多任务异步、提供 auto execute 上下文管理器#1783、#1784、#1785。相关实现见 packages/vaex-core/vaex/execution.py、tasks.py。3.2 指纹fingerprint与多级缓存4.3.0 引入df.fingerprint()——一个跨运行时的唯一缓存键并支持 Redis 与 diskcache 缓存任务结果#1393、#1287。4.6.0 起指纹在DataFrame 变化但任务描述不变时保持稳定以提升缓存命中#1627并引入多级缓存如内存 磁盘#1580。4.9.0 修复了过滤器使用虚拟列导致指纹冲突的隐患#19494.10.0 让 isin 复用 hashmap 从而指纹稳定#2089。指纹与缓存的实现集中在 packages/vaex-core/vaex/cache.py、dataset.pyC 侧 hashmap 见 packages/vaex-core/src/hash.hpp 与各hash_*.cpp。3.3 线程、进程与 GIL4.8.0 将互斥锁移入 C 层避免 GIL 问题#1847并重构提升整体性能#1863、#1869。4.9.0 减少 multiprocessing 进程数#1979。4.15.0 让线程数统一走vaex.settings#2231。在 packages/vaex-core/vaex/settings.py 中可看到默认值逻辑thread_count默认multiprocessing.cpu_count()thread_count_io默认thread_count 1process_count默认等于thread_count这些字段可通过环境变量VAEX_NUM_THREADS、VAEX_NUM_THREADS_IO覆盖整个 settings 结构支持从$VAEX_HOME/main.yml加载。四、groupby、join 与聚合的性能演进路线4.1 groupby从 2x 到 250x版本变更效果vaex-core 2.0.0groupby 重构2x4x 提速#730vaex-core 2.0.3isin 用 hashmap基本类型 2x4x、字符串场景最高 200x#822vaex-core 4.2.0稀疏化 groupby更低内存占用最高 250x 提速#1381新增排序 groupby#1339vaex-core 4.6.0支持常规 bins 分组、受限 value 数与 OTHERS对齐 binby#1589、#1641新增vaex.agg.any/all#1630vaex-core 4.9.0预排序分组列更优性能#1990sparse groupby 的 C 侧实现可在 packages/vaex-core/src/binner_hash.cpp、binner_combined.cpp 中查看groupby.describe的快捷入口位于 packages/vaex-core/vaex/groupby.py其实现等价于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缺失值处理是持久战役join 相关的修复贯穿多个版本CHANGELOG 记录2.0.0右表仅有 join 列时 join 失败、名称冲突、虚拟列与变量处理修复#570、#573、#2010。2.0.1右表缺失左表值时罕见情况下指向 row 0的修复#765。4.2.0join 支持 datetime 列。4.9.x、4.10.0、4.11.0连续修复缺失值/nan 导致的 join 问题#2077、#808。join 的 Python 层实现在 packages/vaex-core/vaex/join.pyC 哈希与字符串处理在 packages/vaex-core/src/ 的hash_string.cpp、string_utils.cpp等文件中。4.3 聚合器生态除了skew、kurtosis、describe、list、first/last、any/all4.x 还新增了percentile_approx进度条#1889、unique/nunique的limit与limit_raise#1801、nunique对数字列带 selection 时错误结果的修复#2199。聚合器的完整清单见 packages/vaex-core/vaex/agg.py对应 C 内核在 packages/vaex-core/src/agg_*.cpp。五、CSV 读取与 Out-of-Core 懒加载实战CHANGELOG 中 CSV 能力是 4.134.15 的重点核心 API 为vaex.from_csv_arrow定义于 packages/vaex-core/vaex/init.pyimport vaex # 常规非懒加载读取 df vaex.from_csv_arrow(data.csv) # Out-of-Core 懒加载不将数据全部载入内存按块读取 df vaex.from_csv_arrow(huge.csv, lazyTrue, chunk_size10MiB, # 每块读取大小默认 10MiB newline_readahead64kiB, # 换行探测预读缓冲默认 64kiB schema_infer_fraction0.01) # 用于推断 schema 的文件比例默认 1%lazyTrue时返回基于 packages/vaex-core/vaex/csv.py 中DatasetCsvLazy的 DataFramelazyFalse时用DatasetCsv全量读取。三个 options 直接透传 PyArrow 的ReadOptions/ParseOptions/ConvertOptions可精细控制列类型推断、null 值处理、块大小。4.14.0 的自动检测类型#2224让懒加载读取时无需手动指定 schema。传统vaex.from_csv则保留 pandas 后端路径packages/vaex-core/vaex/init.py支持chunk_size分块迭代与大文件convertTrue转 HDF5默认 5M 行/块约 1GB 内存需双倍磁盘空间。六、materialize 与内存/性能取舍materialize是 4.6.0 引入的将数据集列物化为原生 CPU 格式的能力#1625对非内存映射文件如 parquet尤其重要。源码见 packages/vaex-core/vaex/dataframe.pydf vaex.open(somewhatslow.parquet) df.x.sum() # 慢每次都要解码 parquet 块 df df.materialize() # 将真实列缓存到内存 df.x.sum() # 首次调用填缓存仍慢 df.x.sum() # 之后走内存速度最快要点materialize(columnNone, inplaceFalse)column接受列名或表达式4.15.0 起支持单个列/表达式#2249为 None 时物化全部列含隐藏列inplaceTrue时原地修改。虚拟列会被立即evaluate并转为真实列通过DatasetArrays真实列则包装进DatasetCached首次访问时缓存。4.15.0 还修复了df.extract()的线程安全问题#2182并在无法执行时抛出更明确的异常#22324.15 前 materialize 只接受虚拟列名列表。需要警惕materialize可能占用大量内存源码 docstring 中明确警告。七、selections、过滤与缺失值处理7.1 selection 相关修复2.4.0/2.5.0表达式针对过滤数据与 selection 不重复求值#483、#496、#505过滤与 selection 支持布尔自动广播实现条件过滤#489。4.1.0df.extract()改用 mask 而非 indicescommit 398b682f。4.9.0按布尔列过滤时正确记录列依赖#2016。4.13.0修复过滤 DataFrame 的负索引#2163。4.15.0Arrow 数据用于 selection 时不再忽略 null 或失败#2196selection-dropna支持非标识符表达式#2208。selections 的实现位于 packages/vaex-core/vaex/selections.py过滤在 dataframe.py 的filter相关方法中。7.2 dropna / dropinf / fillna4.0.0 新增dropinf#821。4.8.0 修复fillna/fillmissing在需要时对整数列向上转型#1869。4.11.0 补充 dropna/dropinf 等方法的文档说明#2104。八、vaex 3.0破坏性变更与迁移清单vaex 3.0.02020-05-24是一次面向 Python 3 的现代化CHANGELOG 列出的 Breaking changes 对升级者影响重大放弃 Python 2DataFrame 内部改用普通 dict要求 Python ≥ 3.6。变量不再能访问pi和e常量。df.rename_column改为df.rename同时重命名变量。绘图等默认 limits 变为 minmax避免遗漏离群点。df.get_column_names()返回别名非法标识符名传aliasFalse取内部列名。df.export/to_dict/to_items/to_arrays的virtual默认值为 True。df.dtype变为属性表达式数据类型用df.data_type()df.expr.dtype行为不变。df.categorize接受min_value/max_value不再需要check参数labels 不必是字符串新增inplace参数。vaex.open/from_csv默认不再拷贝 pandas index#756。vaex-core 2.0.02020-05-24作为 vaex 3.0 的配套核心还完成打印 DataFrame 单次 evaluate#571、join 2x 提速与更低内存#586、按列 dtypeobject 时更快的类型检查#612、DataFrame/Executor 线程安全支持 Dash/Flask#670、percentile_approx支持百分比序列#527、polygon 测试利于 geo/geojson#685、dt.quarter与dt.strftime#682。九、子包版本节奏与配套生态演进CHANGELOG 同时记录了各子包的独立发版便于排查兼容性问题vaex-hdf50.12.0 支持在 HDF5 中存储 Arrow Dictionary 编码categorical#18140.13.0 需 vaex-core 4.13.0dataset 重构0.14.0 用 null bitmask 在 HDF5 中存 Arrow 数组#22450.12.2 关闭 HDF5 文件时不持有 NumPy 数组引用#20660.10.0 支持写高维数组#1563。vaex-viz0.5.4 修正 matplotlib 3.6.0 下 colorbar 位置#22150.5.3 改善 histogram 的 selection 行为#2143。vaex-astro0.9.2 修复 eq2gal 拼写#2206。vaex-ml0.18.0 支持 metrics 中使用 selections#20730.17.0 依赖vaex.datasets.iris()0.16 起依赖统一 settings需 vaex-core 4.70.15 起 dot product 用专用函数0.14.0 新增 MultiHotEncoder 与多种 ML metrics0.13.0 支持 TensorFlow/keras#15100.12.0 集成 River、随机投影、增量 PCA。vaex-server0.6.0 用 FastAPI 完全重构#13000.8.1 兼容 Python 3.6。vaex-jupyter0.5.1 提供 selection toggle list0.7.0 提供 settings 编辑组件。vaex-contrib0.1.0 支持 Google BigQuery 导入导出#1470代码在 packages/vaex-contrib/vaex/contrib/io/gbq.py。十、依赖、环境与构建事项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 加速表达式 jit#5844.11.0 提供 osx arm wheel#2124。blake34.5.0 用于加速 blob 编码#15754.8.0 修复 blake3 兼容问题#1818。构建系统4.8.0 起使用 cmake/scikit-build#1847参考 packages/vaex-core/CMakeLists.txt。环境变量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。十一、如何继续深入核心 DataFrame API 与实现packages/vaex-core/vaex/dataframe.py聚合器定义packages/vaex-core/vaex/agg.py分组、连接、滚动窗口packages/vaex-core/vaex/groupby.py、join.py、rolling.pyC 加速内核packages/vaex-core/src/hash、agg、binner、strings测试印证CHANGELOG 中多数修复均有对应回归测试如 tests/groupby_test.py、tests/join_test.py、tests/unique_test.py、tests/from_csv_test.py 等可用于验证本文所述行为在当前版本中的实际表现。赞分享数据分析数据可视化大数据数据科学【免费下载链接】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点击查看免费下载相关推荐Botkit 版本演进全解析从 0.x 到 4.15 的核心特性变迁与源码解读Botkit 版本演进全解析从 0.x 到 4.15 的核心特性变迁与源码解读 导读 本文以仓库根目录的 changelog.md https://link后端即时通讯Argos Translate 版本演进全解析从 1.0 到 1.10 的核心能力与架构变迁Argos Translate 版本演进全解析从 1.0 到 1.10 的核心能力与架构变迁 本文以官方发布说明 ReleaseNotes.md https:人工智能NLP本地部署tsfresh 版本演进全解析从 0.1.0 到 0.21.2 的核心功能变迁、破坏性变更与升级指南tsfresh 版本演进全解析从 0.1.0 到 0.21.2 的核心功能变迁、破坏性变更与升级指南 tsfreshTime Series Feature特征工程机器学习数据分析上一篇next-learn路由优化SEO友好的路由结构下一篇Loose Leaf 第三方服务集成教程社交分享与数据分析一键配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表