Exécuter des charges de travail Spark à partir d’un client tiers¶
Vous pouvez exécuter des charges de travail Spark de manière interactive à partir de Jupyter Notebooks, VS Code, ou toute interface basée sur Python sans avoir besoin de gérer un cluster Spark. Les charges de travail s’exécutent sur l’infrastructure Snowflake.
Par exemple, vous pouvez effectuer les tâches suivantes :
Confirmer que vous avez des conditions préalables.
Configurer votre environnement pour vous connecter avec Snowpark Connect for Spark sur Snowflake.
Installez Snowpark Connect for Spark.
Exécuter le code PySpark depuis votre client pour l’exécuter sur Snowflake.
Conditions préalables¶
Vérifiez que vos installations Python et Java sont basées sur la même architecture informatique. Par exemple, si Python est basé sur arm64, Java doit également être basé sur arm64 (et non x86_64, par exemple).
Configurer votre environnement¶
Vous pouvez configurer votre environnement de développement en veillant à ce que le code puisse se connecter à Snowpark Connect for Spark sur Snowflake. Pour se connecter à Snowflake, le code client utilisera un fichier .toml contenant les détails de la connexion.
Si Snowflake CLI est installée, vous pouvez l’utiliser pour définir une connexion. Sinon, vous pouvez écrire manuellement les paramètres de connexion dans un fichier config.toml.
Ajouter une connexion en utilisant Snowflake CLI¶
Vous pouvez utiliser Snowflake CLI pour ajouter des propriétés de connexion que Snowpark Connect for Spark peut utiliser pour se connecter à Snowflake. Vos modifications sont enregistrées dans un fichier config.toml.
Exécutez la commande suivante pour ajouter une connexion à l’aide de la commande :command:
addsnow connection.snow connection add
Suivez les invites pour définir une connexion.
Veillez à spécifier
spark-connectcomme nom de connexion.Cette commande ajoute une connexion à votre fichier
config.toml, comme dans l’exemple suivant :[connections.spark-connect] host = "example.snowflakecomputing.com" port = 443 account = "example" user = "test_example" password = "password" protocol = "https" warehouse = "example_wh" database = "example_db" schema = "public"
Exécutez la commande suivante pour confirmer que la connexion fonctionne.
Vous pouvez tester la connexion de cette manière lorsque vous l’avez ajoutée en utilisant Snowflake CLI.
snow connection list snow connection test --connection spark-connect
Ajouter une connexion en écrivant manuellement un fichier de connexion¶
Vous pouvez écrire ou mettre à jour manuellement un fichier connections.toml afin que votre code puisse se connecter à Snowpark Connect for Spark sur Snowflake.
Exécutez la commande suivante pour vous assurer que votre fichier
connections.tomlautorise uniquement au propriétaire (utilisateur) d’avoir un accès en lecture et en écriture.chmod 0600 "~/.snowflake/connections.toml"
Modifiez le fichier
connections.tomlafin qu’il contienne une connexion[spark-connect]avec les propriétés de connexion dans l’exemple suivant.Veillez à remplacer les valeurs par vos propres spécificités de connexion.
[spark-connect] host="my_snowflake_account.snowflakecomputing.com" account="my_snowflake_account" user="my_user" password="&&&&&&&&" warehouse="my_wh" database="my_db" schema="public"
Installer Snowpark Connect for Spark¶
Vous pouvez installer Snowpark Connect for Spark en tant que paquet Python.
Créez un environnement virtuel Python.
Par exemple, vous pouvez utiliser Conda, comme dans l’exemple suivant.
conda create -n xxxx pip python=3.12 conda activate xxxx
Installez le paquet Snowpark Connect for Spark.
pip install --upgrade --force-reinstall snowpark-connect
Ajoutez du code Python pour démarrer un serveur Snowpark Connect for Spark et créez une session Snowpark Connect for Spark.
import os import snowflake.snowpark from snowflake import snowpark_connect # Import snowpark_connect before importing pyspark libraries from pyspark.sql.types import Row os.environ["SPARK_CONNECT_MODE_ENABLED"] = "1" snowpark_connect.start_session() # Start the local Snowpark Connect for Spark session spark = snowpark_connect.get_session()
Run Python code from your client¶
Once you have an authenticated connection in place, you can write code as you normally would.
Vous pouvez exécuter le code PySpark qui se connecte à Snowpark Connect for Spark en utilisant la bibliothèque client PySpark.
from pyspark.sql import Row
df = spark.createDataFrame([
Row(a=1, b=2.),
Row(a=2, b=3.),
Row(a=4, b=5.),])
print(df.count())
Premiers pas avec Snowpark Connect pour les applications Scala¶
Ce guide vous guide à travers la configuration de Snowpark Connect et la connexion de vos applications Scala au serveur Snowpark Connect.
Step 1: Set Up Snowark Connect Environment¶
Pour obtenir des instructions sur la configuration de votre environnement Python et l’installation de Snowpark Connect, suivez la documentation officielle de Snowpark Connect :
Les étapes clés sont les suivantes :
Creating a Python virtual environment
Installing Snowpark Connect for Spark
Configuration de votre configuration de connexion
Étape 2 : Créer un script pour le serveur Snowpark Connect¶
Créez un script Python pour lancer le serveur Snowpark Connect.
launch-snowpark-connect.py
from snowflake import snowpark_connect def main(): snowpark_connect.start_session(is_daemon=False, remote_url="sc://localhost:15002") print("SAS started on port 15002") if __name__ == "__main__": main()
Lancer le serveur Snowpark Connect
# Make sure you're in the correct Python environment pyenv activate your-snowpark-connect-env # Run the server script python launch-snowpark-connect.py
Étape 3 : Configurer l’application Scala¶
Ajoutez la dépendance du client Spark Connect à votre fichier build.sbt :
libraryDependencies += "org.apache.spark" %% "spark-connect-client-jvm" % "3.5.3" // Add JVM options for Java 9+ module system compatibility javaOptions ++= Seq( "--add-opens=java.base/java.nio=ALL-UNNAMED" )
Exécuter du code Scala pour se connecter au serveur Snowpark Connect for Spark
import org.apache.spark.sql.SparkSession import org.apache.spark.sql.connect.client.REPLClassDirMonitor object SnowparkConnectExample { def main(args: Array[String]): Unit = { // Create Spark session with Snowpark Connect val spark = SparkSession.builder().remote("sc://localhost:15002").getOrCreate() // Register ClassFinder for UDF support (if needed) // val classFinder = new REPLClassDirMonitor("target/scala-2.12/classes") // spark.registerClassFinder(classFinder) try { // Simple DataFrame operations import spark.implicits._ val data = Seq( (1, "Alice", 25), (2, "Bob", 30), (3, "Charlie", 35) ) val df = spark.createDataFrame(data).toDF("id", "name", "age") println("Original DataFrame:") df.show() println("Filtered DataFrame (age > 28):") df.filter($"age" > 28).show() println("Aggregated result:") df.groupBy().avg("age").show() } finally { spark.stop() } } }
Compilez et exécutez votre application.
# Compile your Scala application sbt compile # Run the application sbt "runMain SnowparkConnectExample"
Prise en charge des UDF sur Snowpark Connect for Spark¶
Lorsque vous utilisez des fonctions définies par l’utilisateur ou du code personnalisé, effectuez l’une des opérations suivantes :
Enregistrez un ClassFinder pour surveiller et charger des fichiers de classe.
import org.apache.spark.sql.connect.client.REPLClassDirMonitor val classFinder = new REPLClassDirMonitor("/absolute/path/to/target/scala-2.12/classes") spark.registerClassFinder(classFinder)
Chargez les dépendances JAR si nécessaire.
spark.addArtifact("/absolute/path/to/dependency.jar")
Résoudre les problèmes d’installation Snowpark Connect for Spark¶
With the following list of checks, you can troubleshoot Snowpark Connect for Spark installation and use.
Assurez-vous que Java et Python sont basés sur la même architecture.
Use the most recent Snowpark Connect for Spark package file, as described in Installer Snowpark Connect for Spark.
Confirmez que la commande Python avec le code PySpark fonctionne correctement pour l’exécution locale, c’est-à-dire sans connexion Snowflake.
Par exemple, exécutez une commande telle que la suivante :
python your_pyspark_file.py