Tous les produits
Search
Centre de documentation

AnalyticDB:Développer des applications Spark avec PySpark

Dernière mise à jour :Aug 10, 2026

Cette rubrique explique comment développer des jobs Python AnalyticDB for MySQL pour Spark et présente une méthode pour configurer un environnement cloud.

Prérequis

Utilisation de base de PySpark

  1. Rédigez l'exemple de code suivant et enregistrez-le sous le nom example.py.

    from pyspark.sql import SparkSession
    if __name__ == "__main__":
        spark = SparkSession.builder.getOrCreate()
        df = spark.sql("SELECT 1+1")
        df.printSchema()
        df.show()
    
  2. Téléchargez example.py vers OSS. Pour plus d'informations, consultez la section Télécharger un fichier.

  3. Accédez à l'éditeur de développement Spark.

    1. Connectez-vous à la console AnalyticDB for MySQL. Dans l'angle supérieur gauche de la console, sélectionnez une région. Dans le volet de navigation de gauche, cliquez sur Clusters. Localisez le cluster à gérer et cliquez sur son ID.

    2. Dans le volet de navigation de gauche, choisissez Job Development > Spark JAR Development.

  4. En haut de la fenêtre de l'éditeur, sélectionnez un groupe de ressources de job et un type de job Spark. Cette rubrique utilise le type Batch comme exemple.

  5. Saisissez la configuration de job suivante dans l'éditeur.

    {
     "name": "Spark Python Test",
     "file": "oss://testBucketName/example.py",
     "conf": {
     "spark.driver.resourceSpec": "small",
     "spark.executor.instances": 1,
     "spark.executor.resourceSpec": "small"
     }
    }

    Pour obtenir des détails sur les paramètres, consultez la section Description des paramètres.

Utiliser des dépendances Python

Cette rubrique présente deux solutions pour configurer un environnement basé sur le cloud sans nécessiter d'empaquetage local.

Type de solution

Cas d'utilisation

Avantages et inconvénients

installation en temps réel

  • Débogage et jobs temporaires.

  • Peu de dépendances et téléchargement rapide.

Avantages : Configuration simple et prête à l'emploi.

Inconvénients : Les dépendances sont retéléchargées et réinstallées à chaque exécution du job.

construction cloud

  • Environnements de production.

  • Nombreuses ou volumineuses dépendances.

  • Environnements nécessitant une réutilisation à long terme.

Avantages : Empaquetez une fois, réutilisez indéfiniment. Garantit un démarrage rapide et une grande stabilité.

Inconvénients : Nécessite un job supplémentaire pour empaqueter les dépendances.

Prérequis

Avant de configurer l'environnement cloud, assurez-vous que les conditions suivantes sont remplies :

  1. État du cluster : Le cluster est initialisé et peut exécuter avec succès l'exemple de base Spark Pi.

  2. Exigences de version :

    • Version Spark : La version 3.5.1 est prise en charge.

    • Version Python : Les versions 3,9 ou 3,11 sont prises en charge.

  3. Contrainte clé (version NumPy) :

    • Apache Spark doit s'exécuter dans un environnement avec numpy < 2.0.0.

    • Le système impose l'installation de numpy==1.26.0.

    • Important : Assurez-vous que les autres dépendances installées, telles que Pandas et SciPy, sont compatibles avec NumPy 1.26.0. Sinon, le job échouera.

Exemples

Installation en temps réel

  1. Préparez votre code d'application

    Rédigez un script Python, par exemple job.py, et téléchargez-le vers un chemin OSS, tel que oss://your-bucket/scripts/job.py.

    # This sample script prints all dependencies in the current Python environment.
    # Print all modules in the Python environment
    import pkgutil
    if __name__ == "__main__":
        for module_info in pkgutil.iter_modules():
            print(module_info.name)
  2. Configurez les paramètres du job

    ## Sample job
    {
        "file": "oss://your-bucket/scripts/job.py",  // Path to your code file
        "name": "Real-time Env Demo",
        "conf": {
            "spark.adb.version": "3.5",
            "spark.driver.resourceSpec": "medium",
            "spark.executor.instances": 1,
            "spark.executor.resourceSpec": "medium",
            // --- Start of core configuration ---
            // 1. Specify the Python version
            "spark.kubernetes.driverEnv.PYTHON_BIN": "python3.11",
            "spark.executorEnv.PYTHON_BIN": "python3.11",
            // 2. Specify the dependencies to install (for both Driver and Executor)
            "spark.kubernetes.driverEnv.PYTHON_MODULES": "chinesecalendar>=1.10.0,pandas>=1.5.3,lunar_python",
            "spark.executorEnv.PYTHON_MODULES": "chinesecalendar>=1.10.0,pandas>=1.5.3,lunar_python"
            // --- End of core configuration ---
        }
    }
    Important

    Spark se compose d'un Driver (nœud de contrôle) et d'Executors (nœuds d'exécution). Pour garantir un environnement cohérent, vous devez configurer les mêmes variables d'environnement pour les deux composants.

    Paramètre

    Description

    Obligatoire

    Valeur par défaut

    Notes

    spark.kubernetes.driverEnv.PYTHON_MODULES

    Liste des packages Python à installer.

    Oui

    Aucune

    • Séparez plusieurs dépendances Python par des virgules (,).

    • Le format des dépendances Python doit être entièrement conforme aux exigences de la communauté PyPI.

    • Les dépendances Python sans contrainte de version doivent être placées à la fin de la liste.

    Exemple : chinesecalendar>=1.10.0,dynaconf>=3.2.10,pandas>=1.5.3,lunar_python

    spark.executorEnv.PYTHON_MODULES

    spark.kubernetes.driverEnv.PYTHON_BIN

    Version Python à utiliser pour le job.

    Non

    python3.11

    Valeurs valides :

    • python3.11

    • python3.9

    spark.executorEnv.PYTHON_BIN

    spark.kubernetes.driverEnv.INDEX_URL

    URL du dépôt PyPI.

    Non

    http://mirrors.cloud.aliyuncs.com/pypi/simple/

    La valeur par défaut est l'URL d'un miroir hébergé au sein d'Alibaba Cloud, accessible via le réseau interne. Si vous spécifiez une adresse accessible uniquement via le réseau public, telle que le miroir PyPI de l'Université Tsinghua, vous devez activer l'accès au réseau public. Pour plus d'informations, consultez la section Configurer l'accès au réseau public pour une application Spark.

    spark.executorEnv.INDEX_URL

    spark.kubernetes.driverEnv.TRUSTED_HOST

    Domaine du dépôt PyPI à ajouter en tant qu'hôte de confiance.

    Non

    mirrors.cloud.aliyuncs.com

    Python vérifie le certificat SSL du dépôt PyPI lors de l'installation. Si le certificat du dépôt ne provient pas d'une autorité de certification (CA) de confiance, utilisez ce paramètre pour marquer le domaine du dépôt comme hôte de confiance.

    Important

    Utilisez ce paramètre avec prudence. Assurez-vous que la source PyPI configurée est fiable, car les attaques par confusion de dépendances constituent une menace courante.

    spark.executorEnv.TRUSTED_HOST

  3. Exécutez l'exemple de job. Consultez le journal pour vérifier que l'environnement Python contient les dépendances déclarées ainsi que leurs dépendances transitives.

    xxlimited_35
    zlib
    numpy
    pandas
    _distutils_hack
    _virtualenv
    chinese_calendar
    dateutil
    lunar_python
    pip
    pkg_resources
    pytz
    setuptools
    six
    tzdata
    wheel
    >>>>>>>> stderr:
    25/12/25 17:01:56 INFO ShutdownHookManager: Shutdown hook called

Construction cloud

Cette solution utilise un job dédié pour empaqueter les dépendances dans une archive compressée, qui est ensuite téléchargée vers OSS pour une réutilisation dans les jobs suivants.

  1. Planifiez un chemin OSS

    Spécifiez un chemin OSS pour stocker l'environnement empaqueté, par exemple oss://your-bucket/envs/my_custom_env.

  2. Soumettez un job d'empaquetage

    Important
    • Ne modifiez pas le chemin du script d'empaquetage intégré : local:///opt/tools/build_venv.py.

    • Dans args, spécifiez les dépendances à installer.

    ## Sample job
    {
        // 1. Specify all dependencies to be packaged.
        "args": [
            "chinesecalendar>=1.10.0",
            "pandas>=1.5.3",
            "pyarrow>=19.0.1",
            "lunar_python"
        ],
        // 2. Call the built-in packaging script (do not modify).
        "file": "local:///opt/tools/build_venv.py",
        "name": "Build VirtualEnv Job",
        "conf": {
            "spark.driver.resourceSpec": "medium",
            "spark.executor.instances": 1,
            "spark.executor.resourceSpec": "medium",
            // 3. Specify the Python version.
            "spark.kubernetes.driverEnv.PYTHON_BIN": "python3.11",
            // 4. Specify the OSS path to upload the packaged environment (modify as needed).
            "spark.kubernetes.driverEnv.VENV_OSS_PATH": "oss://your-bucket/envs/my_custom_env",
            // 5. Specify the temporary directory for the build.
            "spark.kubernetes.driverEnv.VENV_DIR": "/tmp/build_test"
        }
    }

    Paramètre

    Description

    Obligatoire

    Valeur par défaut

    Notes

    spark.kubernetes.driverEnv.VENV_OSS_PATH

    Chemin de stockage du package d'environnement.

    Oui

    Aucune

    Exemple : oss://your-bucket/envs/my_custom_env.

    spark.kubernetes.driverEnv.VENV_DIR

    Répertoire de construction temporaire.

    Non

    /tmp/venv

    Si le package d'environnement est volumineux, montez un disque de données et remplacez ce chemin par /user_data_dir.

    spark.kubernetes.driverEnv.PYTHON_BIN

    Version Python à utiliser pour le job.

    Non

    python3.11

    Valeurs valides :

    • python3.11

    • python3.9

    spark.kubernetes.driverEnv.INDEX_URL

    URL du dépôt PyPI.

    Non

    http://mirrors.cloud.aliyuncs.com/pypi/simple/

    La valeur par défaut est l'URL d'un miroir hébergé au sein d'Alibaba Cloud, accessible via le réseau interne. Si vous spécifiez une adresse accessible uniquement via le réseau public, telle que le miroir PyPI de l'Université Tsinghua, vous devez activer l'accès au réseau public. Pour plus d'informations, consultez la section Configurer l'accès au réseau public pour une application Spark.

    spark.kubernetes.driverEnv.TRUSTED_HOST

    Domaine du dépôt PyPI à ajouter en tant qu'hôte de confiance.

    Non

    mirrors.cloud.aliyuncs.com

    Python vérifie le certificat SSL du dépôt PyPI lors de l'installation. Si le certificat du dépôt ne provient pas d'une autorité de certification (CA) de confiance, utilisez ce paramètre pour marquer le domaine du dépôt comme hôte de confiance.

    Important

    Utilisez ce paramètre avec prudence. Assurez-vous que la source PyPI configurée est fiable, car les attaques par confusion de dépendances constituent une menace courante.

  3. Exécutez le job

    Les journaux affichent les détails du téléchargement de l'archive ainsi qu'une liste complète des packages et de leurs versions installés dans l'environnement virtuel.

    ------------------ --------------
    chinesecalendar    1.11.0
    lunar_python       1.4.8
    numpy              1.26.0
    pandas             2.3.3
    pip                24.2
    pyarrow            22.0.0
    python-dateutil    2.9.0.post0
    pytz               2025.2
    setuptools         75.1.0
    six                1.17.0
    tzdata             2025.3
    wheel              0.44.0
    Uploading archive to oss://xxx/envs/my_custom_env/venv_20251225174458.tar.gz
    + ossutil cp /tmp/venv_20251225174458.tar.gz xxx
    xxx
    xxx
    xxx
    xxx
    xxx
    xxx
    xxx
    xxx
    xxx
    Succeed: Total num: 1, size: 115,655,687. OK num: 1(upload 1 files).
    0.788886(s) elapsed
    Upload completed: oss://xxx/envs/my_custom_env/venv_20251225174458.tar.gz
  4. Utilisez le package d'environnement

    Pour les jobs PySpark suivants, vous pouvez référencer l'archive située dans oss://your-bucket/envs/my_custom_env.

    Pour utiliser l'environnement empaqueté, définissez le paramètre archives dans la configuration de votre job.

    Avertissement

    Cette configuration est prise en charge uniquement dans Spark 3.5 et versions ultérieures.

    ## Sample usage
    {
     "name": "Spark Python",
     "file": "oss://testBucketName/example.py",
     "archives": ["oss://your-bucket/envs/my_custom_env/venv_*****.tar.gz#PY3"],
     "args": [
     "oss://testBucketName/staff.csv"
     ],
     "conf": {
     "spark.driver.resourceSpec": "small",
     "spark.executor.instances": 2,
     "spark.executor.resourceSpec": "small",
     "spark.pyspark.python": "./PY3/venv/bin/python3"
     }
    }

Dépannage

  1. ModuleNotFoundError :

    • Vérifiez que les dépendances sont configurées pour driverEnv et executorEnv.

    • Assurez-vous que les noms des packages sont correctement orthographiés et correspondent aux noms sur PyPI.

  2. Erreurs liées à NumPy :

    Vérifiez si vos dépendances requièrent numpy >= 2.0.0. Si c'est le cas, rétrogradez les versions de vos dépendances pour les rendre compatibles avec numpy 1.26.0.

  3. Délais d'expiration du téléchargement :

    Si des délais d'expiration se produisent toujours lors de l'utilisation du miroir de réseau interne par défaut, vérifiez que vous avez activé l'accès au réseau public pour votre job si vous avez spécifié un miroir public.