web-dev-qa-db-fra.com

Stratégie de partitionnement efficace des trames de données dask

La documentation de Dask parle de répartition pour réduire les frais généraux ici .

Ils semblent cependant indiquer que vous avez besoin de savoir à quoi ressemblera votre trame de données au préalable (c'est-à-dire qu'il y aura 1/100e des données attendues).

Existe-t-il un bon moyen de répartir judicieusement sans faire d'hypothèses? Pour le moment, je partage juste avec npartitions = ncores * magic_number, et définissez la force sur True pour étendre les partitions si nécessaire. Cette taille unique convient à tous les travaux d'approche, mais elle est certainement sous-optimale car mon ensemble de données varie en taille.

Les données sont des données de séries chronologiques, mais malheureusement pas à intervalles réguliers, j'ai utilisé la répartition par fréquence temporelle dans le passé, mais ce serait sous-optimal en raison de l'irrégularité des données (parfois rien pour des minutes puis des milliers de secondes)

15
Samantha Hughes

Après discussion avec mrocklin, une stratégie décente de partitionnement consiste à viser des tailles de partition de 100 Mo guidées par df.memory_usage().sum().compute(). Avec des ensembles de données qui correspondent à RAM le travail supplémentaire que cela pourrait impliquer peut être atténué en utilisant df.persist() placé aux points pertinents.

5
Samantha Hughes

Pour ajouter à la réponse de Samantha Hughes:

memory_usage() par défaut ignore la consommation de mémoire des colonnes de type d'objet. Pour les ensembles de données avec lesquels j'ai travaillé récemment, cela conduit à une sous-estimation de l'utilisation de la mémoire d'environ 10 fois.

À moins que vous ne soyez sûr qu'il n'y ait pas de colonnes de type d'objet, je suggérerais de spécifier deep=True, C'est-à-dire une répartition en utilisant:

df.repartition(npartitions= 1+df.memory_usage(deep=True).sum().compute() // n )

n est la taille de votre partition cible en octets. L'ajout de 1 garantit que le nombre de partitions est toujours supérieur à 1 (// Effectue la division du sol).

5
BHC