Dask read_parquet用于嵌套拼花文件

问题描述

我有许多csv文件(超过90个)对于内存(每个压缩文件〜0.5gb)太大,它们都具有相同的架构。我想转换为镶木地板,然后使用dask进行时间序列分析。

目前,我将它们读入熊猫,执行一些类型检查和业务逻辑,然后使用nops_eval()发送到镶木地板。我想按日期和版本号进行分区。因此,代码如下所示:

ddf.to_parquet

现在这可行,最后我得到一个文件夹结构,如下所示:

'some / path / _metadata'

'some / path / _common_metadata'

'some / path / DATE = 202001 / VERSION = 0 / part.0.parquet'

....依此类推。

现在,我想读入它,并执行基本的内存操作。阅读时得到奇怪的结果。

import pandas as pd
import dask.dataframe as ddf
import pyarrow.dataset as ds

d = pd.DataFrame({'DATE':[202001,202002,202003,202004,202005]*20,'VERSION':[0,1]*50,'OTHER':[1]*100})
d_dask = ddf.from_pandas(d,npartitions=2)
ddf.to_parquet(d_dask,'some/path/',engine = 'pyarrow',partition_on = ['DATE','VERSION'],\
write_metadata_file = True,schema='infer')

我得到以下信息:

test_read = ddf.read_parquet('some/path/',engine='pyarrow',partitioning="hive")
test_read.groupby('DATE').sum()
[IN]: test_read.groupby('DATE').sum().compute()

现在使用[OUT]: DATE OTHER 202001 0 202002 0 202003 0 202004 0 202005 0 API可以正常工作。

pyarrow.datasets

我得到以下信息:

test_read = ds.dataset('some/path/',format='parquet',partitioning="hive")
test_read.to_table().to_pandas().groupby('DATE').sum()

那是我的期望。

有人知道这是怎么回事吗?

版本:

[OUT]:
        OTHER  VERSION
DATE                  
202001     20       10
202002     20       10
202003     20       10
202004     20       10
202005     20       10

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)