Envoyé par
disedorgue
Donc, tu es en "single machine" sur une configuration threads (selon le doc).
Déjà, pour savoir si ce n'est pas une des threads qui bloque bêtement, est-ce que tu as essayé en configuration compute(scheduler='single-threaded') ?
Alors, après avoir plancher là dessus, je dois rectifier des choses histoire que je sois claire dans la suite.
Déjà il semblerait selon la doc que le code ci-dessous ne soit pas une bonne pratique:
df=delayed(dd.concat)(dfs,axis=0,interleave_partitions=True)
J'ai pu identifier qu'il n'était pas le soucis non plus donc pour le moment je vais le bannir.
Ce que j'ai donc fait c'est ceci:
1 2 3 4 5 6 7 8 9 10 11 12 13
| df=dd.concat(dfs,axis=0,interleave_partitions=True)#Donc pas de dask.delayed on a directement un dask.dataframe
%%time
sys.getsizeof(df3.compute(scheduler="processes"))#dure 1min 36s, taille: 1.7MB
%%time
sys.getsizeof(df3.compute(scheduler="threads"))#dure 41.5 s, taille: 2.2MB
%%time
sys.getsizeof(df3.compute(scheduler="single-threaded"))#dure 38.6 s, taille 2.2MB
%%time
sys.getsizeof(df3.compute())#dure 41.3 s, taille 2.2MB |
A titre de comparaison, j'ai appliqué la fonction concat de pandas, et comme je vous le disais c'est plus rapide étonnement.
1 2
| %%time
sys.getsizeof(pd.concat(dfs))#dure 493 ms, taille 2.2MB |
Je constate plusieurs choses:
- scheduler="processes" est beaucoup plus long mais économise la mémoire. Que les autres valeurs de l'argument scheduler donne la même taille que pandas.DataFrame n'a rien d'étonnant vu ce que dit la documentation de dask à ce propos.
- La valeur "single-threaded" est plus rapide que les autres. Je suis étonnée dans le sens que mon processeur est normalement un dual-core avec 4 coeurs virtuels. Dois-je comprendre que j'ai un coeur HS?
Partager