Dask DataFrame.head()在索引后速度非常慢

Dask DataFrame.head()在索引后速度非常慢,dask,Dask,不可复制,但有人能解释为什么索引后.head()调用会大大减慢吗 import dask.dataframe as dd df = dd.read_parquet("Filepath") df.head() # takes 10 seconds df = df.set_index('id') df.head() # takes 10 minutes + 如,set_index中所述,根据新索引对数据进行排序,以便沿着该索引的分区将数据拆分为其逻辑分区。排序需要额外的时间,但一旦执行,将使该

不可复制,但有人能解释为什么索引后.head()调用会大大减慢吗

import dask.dataframe as dd
df = dd.read_parquet("Filepath")
df.head() # takes 10 seconds

df = df.set_index('id')

df.head() # takes 10 minutes +
如,
set_index
中所述,根据新索引对数据进行排序,以便沿着该索引的分区将数据拆分为其逻辑分区。排序需要额外的时间,但一旦执行,将使该索引上的操作更快<原始文件上的code>head()将从光盘上的第一个数据块中提取,而不考虑任何顺序


您可以使用
index=
关键字将索引设置为
read\u parquet
(可能数据本来就已经排序了?)或使用
.map\u分区(lambda df:df.set\u index(..)
),而无需进行此排序,但这会提出一个明显的问题,您为什么要费心,您想实现什么如果数据已经排序,那么您也可以使用
设置索引(..,sorted=True)
甚至可以使用divisions关键字,如果您碰巧有这些信息-这不需要排序,并且相应地更快。

这是特定于数据集和额外信息的,这些信息可能存在于数据来自的文件元数据或服务中。如果在没有适当显式元数据的列上使用
index=
,dask会抱怨。