Cette rubrique explique comment utiliser un nœud PyODPS pour éviter de télécharger des données vers un répertoire local en vue de leur traitement, ou pour traiter les données en ligne.
Contexte
PyODPS propose plusieurs méthodes pour télécharger des données vers un répertoire local. Vous pouvez télécharger les données localement pour les traiter, puis les charger dans MaxCompute. Toutefois, le traitement local des données s'avère inefficace, car il empêche d'exploiter la capacité de traitement massivement parallèle de MaxCompute. Si le volume de données dépasse 10 Mo, nous vous recommandons de ne pas les télécharger vers un répertoire local pour les traiter. Voici les méthodes disponibles pour télécharger des données vers un répertoire local :
Utilisez la méthode
head,tailouto_pandas. Dans la plupart des cas, privilégiez la méthodeheadoutailpour récupérer de petits volumes de données. Pour obtenir de grands volumes de données, utilisez la méthodepersistafin de stocker les données dans une table MaxCompute. Pour plus d'informations, consultez la section Exécuter et obtenir des résultats.Utilisez la méthode
open_reader. Exécutezopen_readersur une table ou une instance SQL pour récupérer les données. Si vous devez traiter de grands volumes de données, nous vous recommandons d'utiliser PyODPS DataFrame ou MaxCompute SQL. Un objet PyODPS DataFrame est créé à partir d'une table MaxCompute. Cette méthode offre une efficacité supérieure à celle du traitement local des données.
Exemple de code
Convertissez une chaîne JSON en plusieurs lignes. Chaque ligne se compose d'une clé et de sa valeur.
-
Pour les tests locaux, utilisez la méthode
headafin de récupérer de petits volumes de donnéesIn [12]: df.head(2) json 0 {"a": 1, "b": 2} 1 {"c": 4, "b": 3} In [14]: from odps.df import output In [16]: @output(['k', 'v'], ['string', 'int']) ...: def h(row): ...: import json ...: for k, v in json.loads(row.json).items(): ...: yield k, v ...: In [21]: df.apply(h, axis=1).head(4) k v 0 a 1 1 b 2 2 c 4 3 b 3 -
Pour la production en ligne, utilisez la méthode
persistafin de stocker de grands volumes de données dans une table MaxComputeIn [14]: from odps.df import output In [16]: @output(['k', 'v'], ['string', 'int']) ...: def h(row): ...: import json ...: for k, v in json.loads(row.json).items(): ...: yield k, v ...: In [21]: df.apply(h, axis=1).persist('my_table')