Dask DataFrame.head()在索引后速度非常慢
不可复制,但有人能解释为什么索引后.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中所述,根据新索引对数据进行排序,以便沿着该索引的分区将数据拆分为其逻辑分区。排序需要额外的时间,但一旦执行,将使该
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会抱怨。