连接dask和vaex之间的进出口

2024-04-20 11:32:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在与vaex和dask合作进行一些分析。在分析的第一部分中,我对dask.dataframe进行了一些处理,我的目的是将我计算的数据帧导出到vaex读取的内容中。我想将数据导出到内存可映射的格式,如hdf或arrow

dask允许导出到hdf和拼花文件中。Vaex允许以hdf和箭头形式导入。两者都允许导出和导入为csv文件,但我想避免这种情况

到目前为止,我有以下选择(和问题):

  • 如果我导出到hdf5文件中,由于dask以行格式导出文件,而vaex以列格式读取文件,因此无法导入文件(https://vaex.readthedocs.io/en/latest/faq.html
  • 我可以将数据导出到拼花地板文件中,但我不知道如何从vaex读取它们。我在中看到了一些答案,以便将文件转换为箭头表,但这需要将表加载到内存中,我不能这样做,因为该表太大,无法装入内存

我当然可以将其导出到csv中,并将其分块加载到vaex中,然后将其导出到列格式的hdf中,但我不认为这应该是两个模块用于大型对象的目的

是否有我缺少的任何选项可以兼容“桥接”两个模块,而无需将完整的表加载到内存中,或必须读/写数据集两次


Tags: 模块文件csv数据内存目的内容dataframe
1条回答
网友
1楼 · 发布于 2024-04-20 11:32:48

为了使用vaex打开parquet,您应该使用vaex.open,并且文件的扩展名必须是parquet

生成数据

fldr = "test"
os.makedirs(fldr, exist_ok=True)

n = 1_000
for i in range(10):
    fn = f"{fldr}/file{i}.parquet"
    df = pd.DataFrame(np.random.randn(n, 2), columns=["a", "b"])
    df["key"] = np.random.randint(0, high=100, size=n)
    df.to_parquet(fn, index=False)

示例:使用dask进行聚合和保存

df = dd.read_parquet(fldr)
grp = df.groupby("key").sum()
grp.to_parquet("output")

用vaex阅读

df = vaex.open("output/part.0.parquet")

相关问题 更多 >