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
pyarrowtable 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
fieldsproprié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_partitionsproprié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
SELECTinstruction à 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.