Python 为什么Dask读取拼花文件的速度比熊猫读取同一拼花文件的速度慢很多?

Python 为什么Dask读取拼花文件的速度比熊猫读取同一拼花文件的速度慢很多?,python,pandas,dask,parquet,Python,Pandas,Dask,Parquet,我正在使用Dask和python测试拼花地板文件上的读取spead,我发现使用pandas读取同一文件的速度明显快于Dask。我希望了解这是为什么,如果有办法获得同等的绩效 所有相关软件包的版本 打印(dask.\uuuuu版本) 打印(pd.\U版本\U) 打印(pyarrow.\uuuuu版本\uuuuuu) 印花(fastparquet.\uuuuuuuuuuuuuuuuuu版本) 2.6.0 0.25.2 0.15.1 0.3.2 import pandas as pd import

我正在使用Dask和python测试拼花地板文件上的读取spead,我发现使用pandas读取同一文件的速度明显快于Dask。我希望了解这是为什么,如果有办法获得同等的绩效

所有相关软件包的版本

打印(dask.\uuuuu版本)
打印(pd.\U版本\U)
打印(pyarrow.\uuuuu版本\uuuuuu)
印花(fastparquet.\uuuuuuuuuuuuuuuuuu版本)

2.6.0
0.25.2
0.15.1
0.3.2

import pandas as pd 
import numpy as np
import dask.dataframe as dd

col = [str(i) for i in list(np.arange(40))]
df = pd.DataFrame(np.random.randint(0,100,size=(5000000, 4 * 10)), columns=col)

df.to_parquet('large1.parquet', engine='pyarrow')
 # Wall time: 3.86 s
df.to_parquet('large2.parquet', engine='fastparquet')
 # Wall time: 27.1 s
df = dd.read_parquet('large2.parquet', engine='fastparquet').compute()
 # Wall time: 5.89 s
df = dd.read_parquet('large1.parquet', engine='pyarrow').compute()
 # Wall time: 4.84 s
df = pd.read_parquet('large1.parquet',engine='pyarrow')
 # Wall time: 503 ms 
df = pd.read_parquet('large2.parquet',engine='fastparquet')
 # Wall time: 4.12 s
使用混合数据类型数据帧时,差异更大

dtypes: category(7), datetime64[ns](2), float64(1), int64(1), object(9)
memory usage: 973.2+ MB
# df.shape == (8575745, 20)

我的第一个猜测是熊猫将拼花地板数据集保存到一个单行组中,这将不允许像Dask这样的系统并行化。这并不能解释它为什么慢,但它确实解释了它为什么不快

有关更多信息,我建议您进行评测。您可能对本文档感兴趣:

df.to_parquet('large1.parquet', engine='pyarrow')
 # Wall time: 9.67 s

df.to_parquet('large2.parquet', engine='fastparquet')
 # Wall time: 33.3 s

# read with Dask
df = dd.read_parquet('large1.parquet', engine='pyarrow').compute()
 # Wall time: 34.5 s

df = dd.read_parquet('large2.parquet', engine='fastparquet').compute()
 # Wall time: 1min 22s

# read with pandas 
df = pd.read_parquet('large1.parquet',engine='pyarrow')
 # Wall time: 8.67 s

df = pd.read_parquet('large2.parquet',engine='fastparquet')
 # Wall time: 21.8 s