如何连接Snowflake与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.

如何解决这个问题?

使用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之间的兼容性问题。

请确认导入的JDBC版本是否正确。

客户端推荐版本:https://docs.snowflake.com/en/release-notes/requirements.html#recommended-client-versions

这看起来与本文中提到的错误类似:https://community.snowflake.com/s/article/Error-py4j-protocol-Py4JJavaError-An-error-occurred-while-calling-o74-load-java-lang-NoSUchMethodError-scala-Product-init-Lscala-Product-V

如果你正在使用Scala 2.12,你需要降级到2.11。请注意,在这种情况下,您还必须为Snowflake使用相关版本的Spark连接器。

雪花的火花连接器可以在这里找到。我们建议您根据Spark版本和Scala 2.11使用最新的连接器版本。

最新更新