Bonnes pratiques pour le chargement de grands volumes de données à partir d'un fichier ou d'une connexion

Lorsque vous travaillez dans un notebook d' Python, vous pouvez utiliser du code généré pour charger des données à partir d'un fichier ou d'une connexion. Si vous devez écrire votre propre code et utiliser les API d' Flight service pour accéder à de grands volumes de données à partir d'un fichier ou d'une connexion, tenez compte des recommandations suivantes afin d'améliorer l'efficacité et d'éviter les problèmes de mémoire lorsque vous utilisez pandas DataFrames.

  • Utilisez la fonction `write_table` pour définir les paramètres `max_chunksize` pour les requêtes d'écriture de données d' Flight service, d'une pyarrow table vers ` Db2 `. Ne dépassez pas 3MB pour un bloc dont la taille correspond à la concurrence maximale à chaque niveau de configuration d'échelle pour les services Flight. Les tailles de bloc supérieures à 3MB entraîneront des problèmes de mémoire insuffisante.
  • Créez des « DataFrames s » plus petites en chargeant des sous-ensembles plus restreints de données, ou évitez tout simplement d'utiliser les « DataFrames s » de pandas. Les pandas utilisent beaucoup de mémoire, bien plus que la quantité de données chargées.
  • Lire les données de Flight service à l'aide du client pyarrowFlight service. Vous n'avez pas besoin d'utiliser pandas.
  • Lancez manuellement le ramasse-miettes d' Python lorsque vous effectuez de nombreuses itérations de tests gourmands en ressources CPU. Il est possible que le ramasse-miettes ne puisse pas s'exécuter normalement pour libérer la mémoire si l'utilisation du processeur ne connaît jamais de temps d'inactivité. Le fait de forcer le ramasse-miettes à s'exécuter périodiquement peut contribuer à réduire l'utilisation de la mémoire.
  • Assurez-vous que les données sortent de la portée lorsqu'elles sont lues, afin que le ramasse-miettes puisse les supprimer.
  • Tenez compte des différences de type entre ` Apache Arrow.Flight` et `pandas`. Assurez-vous de savoir quels types de données « Flight » de l' Apache Arrow correspondent à quels types de données pandas. Pour plus d'informations, consultez la section « Différences entre les types ».
  • Assurez-vous que le schéma demandé contient des types avec lesquels pandas peut fonctionner efficacement. Par exemple, les types décimaux donnent lieu à des objets de type « Python » qui occupent beaucoup d'espace. Demandez ces types au format à virgule flottante simple précision afin de réduire la consommation de mémoire. Vous pouvez effectuer un transtypage dans une instruction SQL ou dans la fields propriété d'une demande de vol.
  • Si une table est trop volumineuse pour être lue en une seule fois dans une seule instance d' DataFrame, il convient de la partitionner et de traiter une seule partition à la fois.
  • Répartissez les données en définissant la num_partitions propriété dans la requête. Cette requête renvoie jusqu'à num_partitionsFlight service points de terminaison pouvant être utilisés pour lire les partitions indépendamment.
  • Réduisez le nombre de colonnes à l'aide d'une SELECT instruction à ce qui est nécessaire lorsque vous devez respecter une taille de partitionnement spécifique.
  • Modifiez la taille du lot de la requête « Flight service » et traitez l' DataFrames e par étapes lorsque vous devez disposer de toutes les colonnes et que la taille de partition définie entraîne une consommation de mémoire trop importante.