Run Spark workloads from VS Code, Jupyter Notebooks, or a terminal¶
Você pode executar cargas de trabalho do Spark interativamente por meio de notebooks Jupyter, VS Code ou qualquer interface baseada em Python sem precisar gerenciar um cluster Spark. As cargas de trabalho são executadas na infraestrutura do Snowflake.
Por exemplo, você pode executar as seguintes tarefas:
Confirme que você tem os pré-requisitos.
Configuração de seu ambiente para se conectar com Snowpark Connect for Spark no Snowflake.
Instale Snowpark Connect for Spark.
Execute código PySpark de seu cliente para executar no Snowflake.
Pré-requisitos¶
Confirme se suas instalações do Python e do Java são baseadas na mesma arquitetura de computador. Por exemplo, se Python for baseado em ARM64, Java também deverá ser ARM64 (e não x86_64, por exemplo).
Configure seu ambiente¶
Você pode configurar seu ambiente de desenvolvimento garantindo que seu código possa se conectar ao Snowpark Connect for Spark no Snowflake. Para conectar-se ao código do cliente Snowflake, você usará um arquivo .toml contendo detalhes da conexão.
Se você tiver Snowflake CLI instalado, você pode usá-lo para definir uma conexão. Caso contrário, você pode escrever manualmente os parâmetros de conexão em um arquivo config.toml.
Adicione uma conexão usando Snowflake CLI¶
Você pode usar Snowflake CLI para adicionar propriedades de conexão que Snowpark Connect for Spark pode usar para se conectar ao Snowflake. Suas alterações são salvas em um arquivo config.toml.
Execute o seguinte comando para adicionar uma conexão usando o comando de conexão snow: comado
add.snow connection add
Siga as instruções para definir uma conexão.
Certifique-se de especificar
spark-connectcomo o nome da conexão.Este comando adiciona uma conexão ao seu arquivo
config.toml, como no exemplo a seguir:[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"
Execute o seguinte comando para confirmar que a conexão funciona.
Você poderá testar a conexão dessa maneira quando a adicionar usando Snowflake CLI.
snow connection list snow connection test --connection spark-connect
Adição de uma conexão gravando manualmente um arquivo de conexão¶
Você pode escrever ou atualizar manualmente um arquivo connections.toml para que seu código possa se conectar ao Snowpark Connect for Spark no Snowflake.
Execute o seguinte comando para garantir que seu arquivo
connections.tomlpermita que somente o proprietário (usuário) tenha acesso de leitura e gravação.chmod 0600 "~/.snowflake/connections.toml"
Edite o arquivo
connections.tomlpara que ele contenha uma conexão[spark-connect]com as propriedades de conexão no exemplo a seguir.Certifique-se de substituir os valores por suas próprias especificações de conexão.
[spark-connect] host="my_snowflake_account.snowflakecomputing.com" account="my_snowflake_account" user="my_user" password="&&&&&&&&" warehouse="my_wh" database="my_db" schema="public"
Instalação do Snowpark Connect for Spark¶
Você pode instalar Snowpark Connect for Spark como um pacote Python.
Crie um ambiente virtual Python.
Confirm that your Python version is 3.10 or later and earlier than 3.13 by running
python3 --version.python3 -m venv .venv source .venv/bin/activate
Instale o pacote Snowpark Connect for Spark.
pip install --upgrade --force-reinstall 'snowpark-connect[jdk]'
Adicione o código Python para iniciar um Snowpark Connect for Spark e crie uma sessão de Snowpark Connect for Spark.
from snowflake import snowflake.snowpark_connect # Import snowpark_connect *before* importing pyspark libraries from pyspark.sql.types import Row spark = snowflake.snowpark_connect.server.init_spark_session()
Run Python code from your client¶
Once you have an authenticated connection in place, you can write code as you normally would.
Você pode executar o código PySpark que se conecta a Snowpark Connect for Spark usando a biblioteca de cliente 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())
Run Scala code from your client¶
You can run Scala applications that connect to Snowpark Connect for Spark by using the Spark Connect client library.
This guide walks you through setting up Snowpark Connect and connecting your Scala applications to the Snowpark Connect for Spark server.
Step 1: Set up your Snowpark Connect for Spark environment¶
Set up your environment by using steps described in the following topics:
Step 2: Create a Snowpark Connect for Spark server script and launch the server¶
Create a Python script to launch the Snowpark Connect for Spark server.
# 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()
Launch the Snowpark Connect for Spark server.
# Make sure you're in the correct Python environment pyenv activate your-snowpark-connect-env # Run the server script python launch-snowpark-connect.py
Step 3: Set up your Scala application¶
Add the Spark Connect client dependency to your build.sbt file.
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" )
Execute Scala code to connect to the Snowpark Connect for Spark server.
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() } } }
Compile e execute o aplicativo.
# Compile your Scala application sbt compile # Run the application sbt "runMain SnowparkConnectExample"
Scala UDF support on Snowpark Connect for Spark¶
When using user-defined functions or custom code, do one of the following:
Register a class finder to monitor and upload class files.
import org.apache.spark.sql.connect.client.REPLClassDirMonitor val classFinder = new REPLClassDirMonitor("/absolute/path/to/target/scala-2.12/classes") spark.registerClassFinder(classFinder)
Carregue as dependências de JAR, se necessário.
spark.addArtifact("/absolute/path/to/dependency.jar")
Solução de problemas de instalação de Snowpark Connect for Spark¶
With the following list of checks, you can troubleshoot Snowpark Connect for Spark installation and use.
Certifique-se de que Java e Python sejam baseados na mesma arquitetura.
Use the most recent Snowpark Connect for Spark package file, as described in Instalação do Snowpark Connect for Spark.
Confirme que o comando :com:`Python` Comando com o código PySpark está funcionando corretamente para execução local, ou seja, sem conectividade do Snowflake.
Por exemplo, execute um comando como o seguinte:
python your_pyspark_file.py
Open source clients¶
You can use standard, off-the-shelf open source software (OSS) Spark client packages—such as PySpark and Spark clients for Java or Scala—from your preferred local environments, including Jupyter Notebooks and VS Code. In this way, you can avoid installing packages specific to Snowflake.
You might find this useful if you want to write Spark code locally and have the code use Snowflake compute resources and enterprise governance. In this scenario, you perform authentication and authorization through programmatic access tokens (PATs).
The following sections cover installation, configuration, and authentication. You’ll also find a simple PySpark example to validate your connection.
Step 1: Install Required Packages¶
Install
pyspark. You don’t need to install any Snowflake packages.pip install "pyspark[connect]>=3.5.0,<4"
Step 2: Setup and Authentication¶
Generate a programmatic access token (PAT).
For more information, see the following topics:
The following example adds a PAT named
TEST_PATfor the usersysadminand sets the expiration to 30 days.ALTER USER add PAT TEST_PAT ROLE_RESTRICTION = sysadmin DAYS_TO_EXPIRY = 30;
Find your Snowflake Spark Connect host URL.
Run the following SQL in Snowflake to find the hostname for your account:
SELECT t.VALUE:type::VARCHAR as type, t.VALUE:host::VARCHAR as host, t.VALUE:port as port FROM TABLE(FLATTEN(input => PARSE_JSON(SYSTEM$ALLOWLIST()))) AS t where type = 'SNOWPARK_CONNECT';
Step 3: Connect to Spark Connect server¶
To connect to the Spark Connect server, use code such as the following:
from pyspark.sql import SparkSession import urllib.parse # Replace with your actual PAT. pat = urllib.parse.quote("<pat>", safe="") # Replace with your Snowpark Connect host from the above SQL query. snowpark_connect_host = "" # Define database/schema/warehouse for executing your Spark session in Snowflake (recommended); otherwise, it will be resolved from your default_namespace and default_warehouse db_name = urllib.parse.quote("TESTDB", safe="") schema_name = urllib.parse.quote("TESTSCHEMA", safe="") warehouse_name = urllib.parse.quote("TESTWH", safe="") spark = SparkSession.builder.remote(f"sc://{snowpark_connect_host}/;token={pat};token_type=PAT;database={db_name};schema={schema_name};warehouse={warehouse_name}").getOrCreate() # Spark session is ready to use. You can write regular Spark DataFrame code, as in the following example: 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())