<<返回python首页 python

《Python 应用案例》

Vaex TB级大数据快速分析工具库

Vaex

什么是Vaex?

不管加载多大的数据,10GB、100GB...对vaex来说都是瞬间搞定。美中不足的是,vaex的懒加载只支持HDF5, Apache Arrow,Parquet, FITS等文件,不支持csv等文本文件,因为文本文件没办法进行内存映射。

内存映射是指硬盘上文件的位置与进程逻辑地址空间中一块大小相同的区域之间的一一对应。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存,具体到代码,就是建立并初始化了相关的数据结构(struct address_space)。

Vaex特点

  1. 性能:适用于海量表格数据,流程>109 行/秒
  2. 惰性/虚拟列:动态计算,不浪费内存
  3. 高效的内存在执行过滤/选择/子集时没有内存副本
  4. 可视化:直接支持,单线通常就足够了
  5. 用户友好的API:您只需要处理DataFrame对象,而制表符完成+ docstring可以帮助您:ds.mean,感觉与Pandas非常相似
  6. Jupyter集成:vaex-jupyter将在Jupyter笔记本和Jupyter实验室中为您提供交互式可视化和选择。
  7. 精益:分成多个包。

安装(安装较费时)

!pip3 install vaex -i https://pypi.tuna.tsinghua.edu.cn/simple

生成数据

import pandas as pd
import vaex
df = pd.DataFrame(np.random.rand(100000,4),columns=['col_1','col_2','col_3','col_4'])
df.to_csv('example.csv',index=False)
vaex.read('example.csv',convert='example1.hdf5')

读取数据

vaex支持读取hdf5、csv、parquet等文件,使用read方法。hdf5可以惰性读取,而csv只能读到内存中。

%%time
df_v = vaex.open('example.hdf5')

数据处理

%%time
df_1 = df_v[df_v.col1>0.5]
%%time
result= (df_1.col_1+df_1.col_2).max
%%time
result

有时候我们需要对数据进行各种各样的转换、筛选、计算等,pandas的每一步处理都会消耗内存,而且时间成本高。除非说使用链式处理,但那样过程就很不清晰。

vaex则全过程都是零内存。因为它的处理过程仅仅产生expression(表达式),表达式是逻辑表示,不会执行,只有到了最后的生成结果阶段才会执行。而且整个过程数据是流式传输,不会产生内存积压。

筛选和计算两个过程,都没有复制内存,这里采用了延迟计算,也就是惰性机制。如果每个过程都真实计算,消耗内存不说,单是时间成本就很大。

可视化展示

%%timeit
df_v.plot(df_v.col_1,df_v.col2,show=True)

vaex还可以进行快速可视化展示,即便是上百亿的数据集,依然能秒出图。

结论

vaex有点类似spark和pandas的结合体,数据量越大越能体现它的优势。只要你的硬盘能装下多大数据,它就能快速分析这些数据。

移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。

狐狸教程 Copyright 2021

进入全屏