记录使用使用Vaex读取超大文件

先放测试结果:

使用vaex读取hdf5数据,文件大小约1.66G,读取时间是0.57ms。

PS:1.66G的数据并不大,大约有两千万行,可以用pandas去读取。我做这个就是想把vaex导出hdf5,在读取这一个整套流程走通。

项目里要处理很多excel文件。我的思路是将他们先转成hdf5格式,在整合成一个大的hdf5文件。这样处理数据更灵活一些。

在这个过程中遇到的问题主要就是:

  1. windows上安装总是失败。使用pip命令或者anaconda安装都失败过。但是mac上安装使用anaconda是成功的。
  2. local variable ‘array’ referenced before assignment问题。

第一个问题,只要是由于网络问题,需要重新设置国内的源。pip可以设置源,anaconda也可以设置源。这里就不介绍了。如果重新设置源还是不成功,那么可以找已经安装成功的同事,把他们的site-packages全部拷贝过来就行了。windows和mac都可以。

第二个问题,乍一看非常摸不着头脑。网上也没有找到资料。后来我经过二分法分析。发现原来是数据类型不一致导致的。就是vaex在读取文件时,会默认给每一行设置一个数据类型,float,int等。此时一列是int,突然变成了string字符串。就会这样报错了。因为需要像下面这样设置一下就好了:

1
2
3
4
5
6
dtypes = {}
for colName in df_cols_names:
dtypes[colName] = np.unicode_

df_tmp = vaex.from_csv(file,sep=",",quoting = csv.QUOTE_NONE,usecols = len(df_cols_names),index_col=False ,names=df_cols_names,
copy_index=False,dtype=dtypes)

注意上面的dtypes,我全部转成了unicode类型。这样坏处就是会消耗内存。

流程终于跑通,vaex也成了我顺手的利器了。

另外对vaex感兴趣可以看看:

  1. https://cloud.tencent.com/developer/article/1640582