连接dask和vaex之间的出口和进口



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

dask允许导出到hdf和parquet文件中。Vaex允许以hdf和arrow形式导入。两者都允许导出和导入为csv文件,但我希望避免这种情况。

到目前为止,我得到了以下选项(和问题(:

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

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

我是否缺少任何选项,可以兼容"桥接"两个模块,而无需将整个表加载到内存中,也无需读取/写入数据集两次?

要使用vaex打开镶木地板,您应该使用vaex.open,并且文件的扩展名必须是镶木地板。

生成数据

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")

最新更新