首页 > 解决方案 > Dask parquet reading 比 Pandas 慢得多

问题描述

在玩 Dask 时,我注意到在 Dask 中读取镶木地板的速度比使用 Pandas 慢得多。下面是 Dask 和 Pandas parquet 读取和计算所有 parquet 中的行数的示例。在这个任务中,有 20 个 parquets 需要读取,它们被 gzip 压缩,大小约为 100MB。在这个设置中,Dask 比多处理的 Pandas 慢 1.78 倍。

t_path是 parquet 文件路径的列表

from multiprocessing import Pool
import dask
import dask.dataframe as dd

df = dd.read_parquet(t_path,engine="pyarrow",columns=cols)
with dask.config.set(pool=Pool(processes=8)):
    df.shape[0].compute()

基于 Dask 的代码在 26.2 秒内运行

import pandas as pd
from multiprocessing import Pool

def parquet_shape(p,cols):
    df = pd.read_parquet(p,columns=cols,engine="pyarrow")
    return df.shape

with Pool(processes=8) as pool:
    res = pool.starmap(parquet_shape,list(map(lambda x: (x,cols),t_path)))

pd.DataFrame(res)[0].sum()

以上基于 Pandas 的代码运行时间为 14.7 秒

我正在寻找有关为什么会出现这种情况的信息?

标签: pythonpandasmultiprocessingdaskdask-distributed

解决方案


推荐阅读