3 votes

Dask DataFrame .head() très lent après l'indexation

Non reproductible, mais quelqu'un peut-il nous expliquer pourquoi un appel à .head() est fortement ralenti après l'indexation ?

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 +

3voto

mdurant Points 9226

Comme indiqué dans le documents , set_index trie vos données en fonction du nouvel index, de sorte que les divisions le long de cet index divisent les données en partitions logiques. Le tri est l'opération qui nécessite le plus de temps, mais qui rendra les opérations travaillant sur cet index beaucoup plus rapides une fois qu'elles auront été effectuées. head() sur le fichier brut récupère le premier bloc de données sur le disque sans tenir compte de l'ordre.

Vous pouvez définir l'index sans cet ordre, soit avec la commande index= mot-clé à read_parquet (peut-être les données étaient-elles déjà ordonnées par nature ?) ou avec .map_partitions(lambda df: df.set_index(..)) Mais cela soulève une question évidente : pourquoi se donner la peine de le faire, que cherche-t-on à obtenir ? Si les données étaient déjà triées, vous auriez également pu utiliser set_index(.., sorted=True) et peut-être même le mot-clé des divisions, si vous disposez de l'information - cela ne nécessiterait pas de tri et serait donc plus rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X