MYj*_*Yjx 5 sql-server jdbc apache-spark apache-spark-sql pyspark
我想从sql server导入一个表,使用JDBC驱动程序激活本地,并在其上运行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
Run Code Online (Sandbox Code Playgroud)
正如这里所说的那样
并使用此行加载数据
df = sqlContext.load(source="jdbc", url="jdbc:sqlserver:dd", dbtable="Reporting.dbo.datatable")
Run Code Online (Sandbox Code Playgroud)
但是,它会抛出一个错误:
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)
Run Code Online (Sandbox Code Playgroud)
因此,如果没有在驱动程序类路径上设置,早期版本的 Spark 可能会出现此问题,因此您也可以尝试将 jar 添加到驱动程序类路径(可以使用 指定--driver-class-path)。我不是超级熟悉在 Windows 系统上进行部署,但您可能还希望conf/spark-env.cmd按照http://spark.apache.org/docs/latest/configuration.html中的建议设置属性。