如何将 Snowflake 与 PySpark 连接起来?
How to connect Snowflake with PySpark?
我正在尝试在本地计算机上使用 Pyspark 连接到 Snowflake。
我的代码如下:
from pyspark.sql.types import *
from pyspark.sql import SparkSession
from pyspark import SparkConf
conf = SparkConf()
conf.set('spark.jars','/path/to/driver/snowflake-jdbc-3.12.17.jar , \
/path/to/connector/spark-snowflake_2.12-2.10.0-spark_3.2.jar')
spark = SparkSession.builder \
.master("local") \
.appName("snowflake-test") \
.config(conf=conf) \
.getOrCreate()
sfOptions = {
"sfURL": "https://someurl.com",
"sfAccount": "account",
"sfUser": "user",
"sfPassword": "password",
"sfDatabase": "database",
"sfSchema": "PUBLIC",
"sfWarehouse": "warehouse"
}
SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"
df = spark.read.format(SNOWFLAKE_SOURCE_NAME) \
.options(**sfOptions) \
.option("query", "select * DimDate") \
.load()
df.show()
当我 运行 出现这个错误时:
py4j.protocol.Py4JJavaError: An error occurred while calling o46.load.
如何解决这个问题?
请确认导入了正确的 JDBC 版本。
推荐的客户端版本:https://docs.snowflake.com/en/release-notes/requirements.html#recommended-client-versions
如果您使用的是 Scala 2.12,则需要将其降级到 2.11。请注意,在这种情况下,您还必须为 Snowflake 使用相关版本的 Spark 连接器。
可以找到 Snowflake 的 Spark 连接器 here。我们建议您根据您的 Spark 版本和 Scala 2.11 使用最新的连接器版本。
使用 Snowflake Spark JAR 版本“spark-snowflake_2.12:2.10.0-spark_3.2”
需要使用 Snowflake JDBC 3.13.14。我看到您使用的是 3.12.17 JDBC 版本。
能否添加JDBC版本3.13.14然后测试。正如 FKyani 所指出的,这是 Snowflake-Spark Jar 和 JDBC jar 之间的兼容性问题。
我正在尝试在本地计算机上使用 Pyspark 连接到 Snowflake。
我的代码如下:
from pyspark.sql.types import *
from pyspark.sql import SparkSession
from pyspark import SparkConf
conf = SparkConf()
conf.set('spark.jars','/path/to/driver/snowflake-jdbc-3.12.17.jar , \
/path/to/connector/spark-snowflake_2.12-2.10.0-spark_3.2.jar')
spark = SparkSession.builder \
.master("local") \
.appName("snowflake-test") \
.config(conf=conf) \
.getOrCreate()
sfOptions = {
"sfURL": "https://someurl.com",
"sfAccount": "account",
"sfUser": "user",
"sfPassword": "password",
"sfDatabase": "database",
"sfSchema": "PUBLIC",
"sfWarehouse": "warehouse"
}
SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"
df = spark.read.format(SNOWFLAKE_SOURCE_NAME) \
.options(**sfOptions) \
.option("query", "select * DimDate") \
.load()
df.show()
当我 运行 出现这个错误时:
py4j.protocol.Py4JJavaError: An error occurred while calling o46.load.
如何解决这个问题?
请确认导入了正确的 JDBC 版本。
推荐的客户端版本:https://docs.snowflake.com/en/release-notes/requirements.html#recommended-client-versions
如果您使用的是 Scala 2.12,则需要将其降级到 2.11。请注意,在这种情况下,您还必须为 Snowflake 使用相关版本的 Spark 连接器。
可以找到 Snowflake 的 Spark 连接器 here。我们建议您根据您的 Spark 版本和 Scala 2.11 使用最新的连接器版本。
使用 Snowflake Spark JAR 版本“spark-snowflake_2.12:2.10.0-spark_3.2” 需要使用 Snowflake JDBC 3.13.14。我看到您使用的是 3.12.17 JDBC 版本。
能否添加JDBC版本3.13.14然后测试。正如 FKyani 所指出的,这是 Snowflake-Spark Jar 和 JDBC jar 之间的兼容性问题。