Python 为什么Dask读取拼花文件的速度比熊猫读取同一拼花文件的速度慢很多?
我正在使用Dask和python测试拼花地板文件上的读取spead,我发现使用pandas读取同一文件的速度明显快于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.\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