MaxFrame propose deux méthodes pour intégrer des dépendances externes à vos jobs Python : télécharger un package tiers en tant que ressource d'archive, ou spécifier une image prédéfinie contenant déjà les bibliothèques requises.
Utilisez ce tableau pour choisir l'approche adaptée :
|
Approche |
Cas d'utilisation |
|
Package tiers |
Vous avez besoin d'une version spécifique d'une bibliothèque ou d'un package personnalisé non disponible dans l'environnement par défaut. Téléchargez le package une seule fois, puis référencez-le pour chaque fonction à l'aide de |
|
Image |
Votre job dépend de plusieurs bibliothèques préinstallées (par exemple, l'image |
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un projet MaxCompute disposant des autorisations nécessaires pour créer des ressources
Le client MaxFrame local installé et configuré
Votre ID AccessKey et votre secret AccessKey stockés en tant que variables d'environnement :
ALIBABA_CLOUD_ACCESS_KEY_IDetALIBABA_CLOUD_ACCESS_KEY_SECRET
Utiliser un package tiers
Étape 1 : Télécharger le package
Téléchargez votre package vers MaxCompute en tant que ressource d'archive avant de le référencer dans le code. Deux méthodes sont disponibles.
Méthode 1 : Télécharger via le SDK ODPS
import os
from odps import ODPS
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='<your-project>',
endpoint='<your-endpoint>',
)
# Replace packages.tar.gz with the path and filename of your package.
o.create_resource("packages.tar.gz", "archive", fileobj=open("packages.tar.gz", "rb"))
|
Paramètre |
Description |
|
|
Nom de votre projet MaxCompute |
|
|
URL de l'endpoint MaxCompute |
Pour plus d'informations sur l'empaquetage d'une bibliothèque tierce en vue de son téléchargement, consultez la rubrique Créer un package tiers pour PyODPS .
Méthode 2 : Télécharger via DataWorks
Consultez la rubrique Créer et utiliser des ressources MaxCompute.
Étape 2 : Référencer le package dans votre code
Importez with_resource_libraries depuis maxframe.udf et appliquez-le en tant que décorateur aux fonctions qui utilisent le package.
from maxframe.udf import with_resource_libraries
@with_resource_libraries("packages.tar.gz", "demo.py")
def my_function(v):
# Import the library from the referenced package.
import some_library
return some_library.process(v)
Transmettez le nom du fichier de ressource (tel qu'il a été téléchargé vers MaxCompute) en tant qu'argument. Le décorateur accepte plusieurs noms de ressources, y compris les fichiers .py. Pour plus de détails sur l'empaquetage automatique, consultez la rubrique Service d'empaquetage automatique.
Exemple : Calculer le PSI avec un package tiers
Cet exemple utilise packages.tar.gz pour calculer l'indice de stabilité de la population (PSI) pour une colonne d'une table de test.
Vous pouvez télécharger l'exemple de package depuis packages.tar.gz.
1. Créez la table de test et insérez des exemples de données.
CREATE TABLE test_float_col (col1 double);
INSERT INTO test_float_col VALUES (3.75),(2.51);
2. Rédigez le job MaxFrame et enregistrez-le sous le nom demo.py.
import os
from odps import ODPS, options
from maxframe.session import new_session
import maxframe.dataframe as md
from maxframe.config import options
from maxframe import config
from maxframe.udf import with_resource_libraries
# Reference the third-party package.
@with_resource_libraries("packages.tar.gz")
def my_psi(v):
from scipy.special import psi
return float(psi(v))
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='<your-project>',
endpoint='<your-endpoint>',
)
# Create a MaxFrame session.
session = new_session(o)
df = md.read_odps_table('test_float_col')
# Run the UDF and print results.
print(df.col1.map(my_psi).execute().fetch())
3. Exécutez le script à l'aide du client MaxFrame local.
python demo.py
Résultat attendu :
0 1.182537
1 0.708048
Name: col1, dtype: float64
Utiliser une image
Définissez odps.session.image dans config.options.sql.settings pour spécifier une image prédéfinie pour le job. Toutes les fonctions de la session s'exécutent dans l'environnement de cette image.
Exemple : Calculer le PSI avec l'image scipy
Cet exemple utilise l'image intégrée scipy pour calculer le PSI d'une colonne d'une table de test.
1. Créez la table de test et insérez des exemples de données.
CREATE TABLE test_float_col (col1 double);
INSERT INTO test_float_col VALUES (3.75),(2.51);
2. Rédigez le job MaxFrame et enregistrez-le sous le nom demo.py.
import os
from odps import ODPS, options
from maxframe.session import new_session
import maxframe.dataframe as md
from maxframe.config import options
from maxframe import config
# Specify the built-in scipy image for this session.
config.options.sql.settings = {
"odps.session.image": "scipy"
}
def my_psi(v):
from scipy.special import psi
return float(psi(v))
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='<your-project>',
endpoint='<your-endpoint>',
)
# Create a MaxFrame session.
session = new_session(o)
df = md.read_odps_table('test_float_col')
# Run the function and print results.
print(df.col1.map(my_psi).execute().fetch())
3. Exécutez le script à l'aide du client MaxFrame local.
python demo.py
Résultat attendu :
0 1.182537
1 0.708048
Name: col1, dtype: float64
Étapes suivantes
Service d'empaquetage automatique — découvrez comment MaxFrame empaquette automatiquement les dépendances
Créer un package tiers pour PyODPS — préparez un package pour le téléchargement
Créer et utiliser des ressources MaxCompute — gérez les ressources via DataWorks