【问题标题】:Classnotfound error when connecting to snowflake from pyspark local machine从 pyspark 本地机器连接到雪花时出现 Classnotfound 错误
【发布时间】:2021-05-26 20:38:57
【问题描述】:

我正在尝试从本地计算机上的 Pyspark 连接到雪花。

我的代码如下所示。

    from pyspark import SparkConf, SparkContext
    from pyspark.sql import SQLContext
    from pyspark.sql.types import *
    from pyspark import SparkConf, SparkContext

    sc = SparkContext("local", "sf_test")
    spark = SQLContext(sc)
    spark_conf = SparkConf().setMaster('local').setAppName('sf_test')

    sfOptions = {
      "sfURL" : "someaccount.some.address",
      "sfAccount" : "someaccount",
      "sfUser" : "someuser",
      "sfPassword" : "somepassword",
      "sfDatabase" : "somedb",
      "sfSchema" : "someschema",
      "sfWarehouse" : "somedw",
      "sfRole" : "somerole",
    }

SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"

我在运行这段特定的代码时遇到错误。

df = spark.read.format(SNOWFLAKE_SOURCE_NAME).options(**sfOptions).option("query","""select * from 
 "PRED_ORDER_DEV"."SALES"."V_PosAnalysis" pos 
    ORDER BY pos."SAPAccountNumber", pos."SAPMaterialNumber" """).load()

Py4JJavaError:调用 o115.load 时出错。 : java.lang.ClassNotFoundException:找不到数据源: net.snowflake.spark.snowflake。请在以下位置找到包裹 http://spark.apache.org/third-party-projects.html 在 org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:657) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:194) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167)

我已加载连接器和 jdbc jar 文件并将它们添加到 CLASSPATH

pyspark --packages net.snowflake:snowflake-jdbc:3.11.1,net.snowflake:spark-snowflake_2.11:2.5.7-spark_2.4
CLASSPATH = C:\Program Files\Java\jre1.8.0_241\bin;C:\snowflake_jar

我希望能够连接到雪花并使用 Pyspark 读取数据。任何帮助将不胜感激!

【问题讨论】:

    标签: pyspark snowflake-cloud-data-platform


    【解决方案1】:

    要运行 pyspark 应用程序,您可以使用 spark-submit 并在 --packages 选项下传递 JAR。我假设您想运行客户端模式,因此您将其传递给 --deploy-mode 选项,最后添加 pyspark 程序的名称。

    如下所示:

    spark-submit --packages net.snowflake:snowflake-jdbc:3.11.1,net.snowflake:spark-snowflake_2.11:2.5.7-spark_2.4 --deploy-mode client spark-snowflake.py
    

    【讨论】:

      【解决方案2】:

      下面的工作脚本。

      您应该在项目的根目录中创建目录 jar 并添加两个 jar:

      • snowflake-jdbc-3.13.4.jar(jdbc 驱动)
      • spark-snowflake_2.12-2.9.0-spark_3.1.jar(火花连接器)。

      接下来你需要了解你的 scala 编译器版本是什么。我正在使用 PyCharm,所以双击 shift 并搜索“scala”。您将看到类似 scala-compiler-2.12.10.jar 的内容。 scala-compiler 版本的第一个数字(在我们的例子中是 2.12)应该与 spark 连接器的第一个数字相同(spark-snowflake_2.12-2.9.0-spark_3.1.jar)

      在下载连接器之前检查 SCALA 编译器版本

      from pyspark.sql import SparkSession
      
      sfOptions = {
          "sfURL": "sfURL",
          "sfUser": "sfUser",
          "sfPassword": "sfPassword",
          "sfDatabase": "sfDatabase",
          "sfSchema": "sfSchema",
          "sfWarehouse": "sfWarehouse",
          "sfRole": "sfRole",
      }
      
      spark = SparkSession.builder \
          .master("local") \
          .appName("snowflake-test") \
          .config('spark.jars', 'jar/snowflake-jdbc-3.13.4.jar,jar/spark-snowflake_2.12-2.9.0-spark_3.1.jar') \
          .getOrCreate()
      
      
      SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"
      
      df = spark.read.format(SNOWFLAKE_SOURCE_NAME) \
          .options(**sfOptions) \
          .option("query", "select * from some_table") \
          .load()
      
      df.show()
      

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 1970-01-01
        • 2020-04-26
        • 2020-12-24
        • 2022-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多