-2

我有 33 个多分区数据帧。都有自己的元数据。它们都是用 fastparquet 制成的。结构看起来像:

- 20190101.parquet
 - _common_metadata
 - _metadata
 - part.0.parquet
 - ....
 - part.n.parquet
- 20190102.parquet
 - _common_metadata
 - _metadata
 - part.0.parquet
 - ....
 - part.n.parquet
- 20190103.parquet
 - _common_metadata
 - _metadata
 - part.0.parquet
 - ....
 - part.n.parquet

我想把这些都加入到一起。

我目前有:

dfs = []
for date in dates:
    df = dd.read_parquet(f'{date}.parquet', engine='fastparquet')
    dfs.append(df)
df = dd.concat(dfs)

这将返回一个名为“concat”的 dask 数据帧,其中包含 129,294 个任务。

然后我试图把这个写出来:

df.to_parquet('out.parquet', engine='fastparquet')

这最后一个电话永远不会开始工作。即: * 我的笔记本单元正在运行 * dask 系统页面显示越来越多的文件描述符,然后变平 * dask 系统页面显示内存增加,然后仍然增加但速度更慢 * 但任务未出现在任务流中

我已经等了1个小时。

(在 dask 2.3.0 上运行)

4

2 回答 2

0

我真诚地希望所有这些都有一个排序的索引列,您可以沿着它加入它们。否则这可能非常昂贵。

如果他们确实有这样的列,您可能需要明确地调用它。

于 2019-08-29T14:36:24.223 回答
0

您可以将一组文件名传递给 fastparquet,它会将它们作为一个读取,您可以将它们加载到 dask 或 pandas 数据帧中。

这就是我如何读取分散在 dask 集群上的镶木地板文件目录

output = ["some list of files..."]
df = client.scatter(dd.read_parquet(output,engine="fastparquet").reset_index().compute())
于 2020-03-04T12:27:48.687 回答