从SQL Server 导入数据到本地 Spark

5
我想使用JDBC驱动程序将SQL Server中的表导入到本地的Spark中,并在其上运行Spark SQL。我下载了适用于SQL Server的sqljdbc并在conf目录中的spark-env.sh文件中添加了以下行:
SPARK_CLASSPATH= "C:/Program Files/Microsoft SQL Server/sqljdbc_4.0/enu/sqljdbc4.jar" ./bin/spark-shell

根据这里的建议,使用以下命令加载数据: 这里
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)
3个回答

0

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


0

另一种做法是在执行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

请确保您已将sqljdbc的上述位置添加到$SPARK_HOME/conf/spark-default.conf文件中,并在spark.jars属性下进行了设置。

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接