如何使用Vaex对两个HDF5文件执行Inner Join并导出为CSV文件
Vaex自带原生的join方法,完全可以替代pandas的merge实现inner join,且全程不用把全量数据加载到内存,性能和你选择Vaex的预期匹配。
你之前报错的根因是pd.merge是pandas的专属接口,仅支持处理pandas DataFrame对象,传入Vaex DataFrame自然无法兼容,直接使用Vaex自带的API即可解决问题。
修正后的可运行代码如下:
import vaex # 读取CSV并转成HDF5格式,convert=True会自动生成.hdf5文件,后续重复运行可直接open对应hdf5文件跳过转换步骤 vaex_df1 = vaex.from_csv(file1, convert=True, chunk_size=5_000) vaex_df2 = vaex.from_csv(file2, convert=True, chunk_size=5_000) # 以下读取hdf5的代码为冗余步骤可省略,from_csv加convert=True已经返回可用的Vaex DataFrame,仅二次运行时可直接用这两行跳过csv转hdf5的过程 # vaex_df1 = vaex.open(f"{file1}.hdf5") # vaex_df2 = vaex.open(f"{file2}.hdf5") # 执行inner join,两边关联字段名相同直接用on参数即可 df_join = vaex_df1.join(vaex_df2, how='inner', on='CL_CLIENT_ID') # 如果两边关联字段名不同,替换为left_on/right_on参数即可: # df_join = vaex_df1.join(vaex_df2, how='inner', left_on='左表关联字段名', right_on='右表关联字段名') # 导出结果到CSV,Vaex原生导出方法,大文件也不会出现内存溢出问题 df_join.export_csv(r'C:\Users\abc\Desktop\New folder\file3.csv') print("succes in compare")
补充注意点:
- 如果join后需要做数据过滤、新增计算字段等操作,直接用Vaex的API处理完成后再导出,全程不会加载全量数据到内存,性能远高于pandas实现
- 导出超大体积CSV时,可以给
export_csv方法增加chunk_size参数控制单次写入的行数,进一步降低内存占用
内容的提问来源于stack exchange,提问作者alok sharma
相关产品推荐
相关产品推荐

