不可复制,但是有人可以填写为什么索引后.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 +
答案 0 :(得分:2)
如docs中所述,set_index
根据新索引对数据进行排序,以便沿该索引进行的划分将数据划分为其逻辑分区。排序是需要额外时间的事情,但是一旦执行,它将使对该索引的操作更快。原始文件上的head()
将从磁盘上的第一个数据块获取,而无需考虑任何顺序。
您可以设置索引而无需使用index=
关键字为read_parquet
(也许数据已经固有地排序了吗?)或使用.map_partitions(lambda df: df.set_index(..))
来进行索引设置,但这引起了显而易见的问题,您为什么要打扰,您要达到什么目标? 如果已经对数据进行了排序,那么您也可以使用set_index(.., sorted=True)
甚至divides关键字,如果您碰巧拥有该信息,则不需要排序,因此可以进行相应的排序更快。