如何将 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

这看起来与本文中提到的错误类似: 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 连接器。

可以找到 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 之间的兼容性问题。