我写这篇文章不是为了问问题,而是为了分享知识。 我正在使用Spark连接到雪花。但我无法进入雪花。数据砖中的内部 JDBC 驱动程序似乎有问题。
这是我得到的错误。
java.lang.NoClassDefFoundError:net/snowflake/client/jdbc/internal/snowflake/common/core/S3FileEncryptionMaterial
我尝试了许多版本的雪花jdbc驱动程序和雪花驱动程序。似乎我可以匹配正确的那个。
提问者给出的答案(我只是从问题中提取了它以获得更好的网站可用性:
步骤 1:使用 Spark 版本 - 2.3.0 和 Scala 版本 - 2.11 创建集群
步骤 2:将雪花-jdbc-3.5.4.jar 附加到集群。 https://mvnrepository.com/artifact/net.snowflake/snowflake-jdbc/3.5.4
步骤 3:将 Spark-snowflake_2.11-2.3.2 驱动程序附加到群集。 https://mvnrepository.com/artifact/net.snowflake/spark-snowflake_2.11/2.3.2
下面是示例代码。
val SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"
val sfOptions = Map(
"sfURL" -> "<snowflake_url>",
"sfAccount" -> "<your account name>",
"sfUser" -> "<your account user>",
"sfPassword" -> "<your account pwd>",
"sfDatabase" -> "<your database name>",
"sfSchema" -> "<your schema name>",
"sfWarehouse" -> "<your warehouse name>",
"sfRole" -> "<your account role>",
"region_id"-> "<your region name, if you are out of us region>"
)
val df: DataFrame = sqlContext.read
.format(SNOWFLAKE_SOURCE_NAME)
.options(sfOptions)
.option("dbtable", "<your table>")
.load()
如果您使用的是 Databricks,则有一个由 Databricks 和 Snowflake 人员共同创建的 Databricks Snowflake 连接器。只需提供一些项即可创建 Spark 数据帧(见下文 - 从 Databricks 文档复制(。
# snowflake connection options
options = dict(sfUrl="<URL for your Snowflake account>",
sfUser=user,
sfPassword=password,
sfDatabase="<The database to use for the session after connecting>",
sfSchema="<The schema to use for the session after connecting>",
sfWarehouse="<The default virtual warehouse to use for the session after connecting>")
df = spark.read
.format("snowflake")
.options(**options)
.option("dbtable", "<The name of the table to be read>")
.load()
display(df)
只要您访问自己的数据库并正确授予所有访问权限,即使在我们第一次尝试期间,也只需几分钟。
祝你好运!
您需要将 CLASSPATH 变量设置为指向 jar,如下所示。除了PYTHONPATH之外,您还需要设置SPARK_HOME和SCALA_HOME。
export CLASSPATH=/snowflake-jdbc-3.8.0.jar:/spark-snowflake_2.11-2.4.14-spark_2.4.jar
您还可以在代码中加载内存 jar 来解决此问题。
火花 = 火花会话 \ 。建筑工人\ .config("spark.jars", "file:///app/snowflake-jdbc-3.9.1.jar,file:///app/spark-snowflake_2.11-2.5.3-spark_2.2.jar"( \ .config("spark.repl.local.jars", "file:///app/snowflake-jdbc-3.9.1.jar,file:///app/spark-snowflake_2.11-2.5.3-spark_2.2.jar"( \ .config("spark.sql.catalogImplementation", "in-memory"( \ .getOrCreate((
请更新到最新版本的 Snowflake JDBC 驱动程序 (3.2.5(; 这应该可以解决此问题。谢谢!