【问题标题】:Import data from sql server to spark local从sql server导入数据到本地spark
【发布时间】:2015-11-13 08:39:07
【问题描述】:

我想使用 JDBC 驱动程序从 sql server 导入一个表到本地 spark 并在其上运行 spark sql。我下载了sqljdbc for sql server,并将这一行添加到conf目录下的spark-env.sh中:

SPARK_CLASSPATH= "C:/Program Files/Microsoft SQL Server/sqljdbc_4.0/enu/sqljdbc4.jar" ./bin/spark-shell

正如here所建议的那样

并使用这一行来加载数据

df = sqlContext.load(source="jdbc", url="jdbc:sqlserver:dd", dbtable="Reporting.dbo.datatable")

但是,它会引发错误:

Py4JJavaError: An error occurred while calling o28.load.
: java.sql.SQLException: No suitable driver found for jdbc:sqlserver:PC-BFS2
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at org.apache.spark.sql.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:118)
        at org.apache.spark.sql.jdbc.JDBCRelation.<init>(JDBCRelation.scala:128)
        at org.apache.spark.sql.jdbc.DefaultSource.createRelation(JDBCRelation.scala:113)
        at org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:269)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
        at py4j.Gateway.invoke(Gateway.java:259)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:207)
        at java.lang.Thread.run(Unknown Source)

【问题讨论】:

    标签: sql-server jdbc apache-spark apache-spark-sql pyspark


    【解决方案1】:

    另一种方法是在执行 spark-submit 时传递驱动程序的位置,如下所示(对我来说效果很好)

    ./bin/spark-submit --driver-class-path C:/Program Files/Microsoft SQL Server/sqljdbc_4.0/enu/sqljdbc4.jar --master spark://ip:7077 mycode.py
    

    请确保您在 $SPARK_HOME/conf/spark-default.conf 和属性 spark.jars 下添加了上述 sqljdbc 位置

    【讨论】:

      【解决方案2】:

      将以下行添加到 spark-defaults.conf

      spark.driver.extraClassPath        "C:/Program Files/Microsoft SQL Server/sqljdbc_4.0/enu/*"
      

      【讨论】:

        【解决方案3】:

        所以早期版本的 Spark 如果没有在驱动类路径上设置它可能会出现这个问题,所以你也可以尝试将 jar 添加到驱动类路径(可以使用--driver-class-path 指定)。 . 我对在 Windows 系统上部署不是很熟悉,但您可能还希望按照http://spark.apache.org/docs/latest/configuration.html 中的建议在conf/spark-env.cmd 中设置属性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-04
          • 1970-01-01
          • 1970-01-01
          • 2023-04-05
          • 2020-08-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多