Exécuter des charges de travail Spark à partir de Snowflake Notebooks¶
Vous pouvez exécuter des charges de travail Spark de manière interactive à partir de Snowflake Notebooks sans avoir besoin de gérer un cluster Spark. Les charges de travail s’exécutent sur l’infrastructure Snowflake.
Pour utiliser Snowflake Notebooks en tant que client afin de développer des charges de travail Spark à exécuter sur Snowflake :
Lancez Snowflake Notebooks
Dans le notebook, démarrez une session Spark.
Écrivez le code PySpark pour charger, transformer et analyser des données, par exemple pour filtrer les commandes client à forte valeur ajoutée ou agréger les revenus.
Utiliser un notebook Snowflake qui fonctionne sur un entrepôt¶
Pour plus d’informations sur Snowflake Notebooks, voir Créer un notebook.
Créez un notebook Snowflake en procédant comme suit :
Connectez-vous à Snowsight.
En haut du menu de navigation, sélectionnez
Create » Notebook » New Notebook.Dans la boîte de dialogue Create notebook, saisissez un nom, une base de données et un schéma pour le nouveau notebook.
Pour plus d’informations, voir Créer un notebook.
Pour Runtime, sélectionnez Run on warehouse.
Pour Runtime version, sélectionnez Snowflake Warehouse Runtime 2.0.
Lorsque vous sélectionnez la version 2.0, vous vous assurez que vous disposez de la prise en charge des dépendances dont vous avez besoin, y compris Python 3.10. Pour plus d’informations, voir Exécutions des notebooks.
Pour Query warehouse et Notebook warehouse, sélectionnez des entrepôts pour l’exécution du code de requête, du noyau et du code Python, comme décrit dans Créer un notebook.
Sélectionnez Create.
Dans le notebook que vous avez créé, sous Packages, assurez-vous d’avoir les paquets suivants répertoriés pour prendre en charge le code dans votre notebook :
Python version 3.10 ou ultérieure.
snowpark-connect, dernière version
Si vous devez ajouter ces paquets, procédez comme suit :
Sous Anaconda Packages, saisissez le nom du paquet dans le champ de recherche.
Sélectionnez le nom du paquet.
Sélectionnez Save.
Pour vous connecter au serveur Snowpark Connect for Spark et tester la connexion, copiez le code suivant et collez-le dans la cellule Python du notebook que vous avez créé :
from snowflake import snowpark_connect spark = snowpark_connect.server.init_spark_session() df = spark.sql("show schemas").limit(10) df.show()
Use a Snowflake Notebook that runs in a workspace¶
For more information about Snowflake Notebooks in Workspaces, see Snowflake Notebooks in Workspaces.
Créez une intégration d’accès externe PyPI.
Vous devez utiliser le rôle ACCOUNTADMIN et disposer d’une base de données à laquelle vous pouvez accéder.
Exécutez les commandes suivantes à partir d’un fichier SQL dans un espace de travail.
USE DATABASE mydb; USE ROLE accountadmin; CREATE OR REPLACE NETWORK RULE pypi_network_rule MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('pypi.org', 'pypi.python.org', 'pythonhosted.org', 'files.pythonhosted.org'); CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION pypi_access_integration ALLOWED_NETWORK_RULES = (pypi_network_rule) ENABLED = true;
Activez l’intégration PyPI dans un notebook.
Dans le notebook, pour Service name, sélectionnez un service.
Pour External access integrations, sélectionnez l’intégration PyPI que vous avez créée.
For Python version, select Python 3.11.
Sélectionnez Create.
Installez le paquet
snowpark_connectde PyPI dans le notebook, en utilisant un code tel que :pip install snowpark-connect[jdk]
Redémarrez le noyau.
À partir du bouton Connect, sélectionnez Restart kernel.
Démarrez le serveur
snowpark_connecten utilisant un code tel que :import snowflake.snowpark_connect spark = snowflake.snowpark_connect.server.init_spark_session()
Exécutez votre code Spark, comme indiqué dans l’exemple suivant :
from pyspark.sql.connect.functions import * from pyspark.sql.connect.types import * from pyspark.sql import Row # Sample nested data data = [(1, ("Alice", 30))] schema = "id INT, info STRUCT<name:STRING, age:INT>" df = spark.createDataFrame(data, schema=schema) df.show() spark.sql("show databases").show()
