1

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

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

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

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

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

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

4

1 回答 1

0

为了使用 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")
于 2020-04-27T22:51:24.317 回答