【发布时间】:2020-05-13 00:09:43
【问题描述】:
我正在将大量(100 到 1000 个)镶木地板文件读入单个 dask 数据帧(单台机器,所有本地)。我意识到了
files = ['file1.parq', 'file2.parq', ...]
ddf = dd.read_parquet(files, engine='fastparquet')
ddf.groupby(['col_A', 'col_B']).value.sum().compute()
比
效率低很多from dask import delayed
from fastparquet import ParquetFile
@delayed
def load_chunk(pth):
return ParquetFile(pth).to_pandas()
ddf = dd.from_delayed([load_chunk(f) for f in files])
ddf.groupby(['col_A', 'col_B']).value.sum().compute()
对于我的特定应用程序,第二种方法 (from_delayed) 需要 6 秒才能完成,第一种方法需要 39 秒。在dd.read_parquet 案例中,在工人开始做某事之前似乎有很多开销,并且有很多transfer-... 操作分散在任务流图中。我想了解这里发生了什么。 read_parquet 方法慢得多的原因可能是什么?它与仅仅读取文件并将它们分成块有什么不同?
【问题讨论】:
-
我看到了同样的行为 - 大量文件中的 read_parquet 需要几分钟才能启动 Dask 集群。就挂在那里。上面的@delayed 版本更快。我尝试了 gather_statistics=False,但它什么也没做。
标签: python pandas dask fastparquet