Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将数据从sql server导入到spark本地_Sql Server_Jdbc_Apache Spark_Apache Spark Sql_Pyspark - Fatal编程技术网

Sql server 将数据从sql server导入到spark本地

Sql server 将数据从sql server导入到spark本地,sql-server,jdbc,apache-spark,apache-spark-sql,pyspark,Sql Server,Jdbc,Apache Spark,Apache Spark Sql,Pyspark,我想使用JDBC驱动程序从sql server导入一个表到spark local,并在其上运行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(

我想使用JDBC驱动程序从sql server导入一个表到spark local,并在其上运行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)
Py4JJavaError:调用o28.load时出错。
:java.sql.SQLException:找不到适合jdbc的驱动程序:sqlserver:PC-BFS2
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
位于org.apache.spark.sql.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:118)
位于org.apache.spark.sql.jdbc.jdbcreation.(jdbcreation.scala:128)
位于org.apache.spark.sql.jdbc.DefaultSource.createRelation(jdbcreation.scala:113)
位于org.apache.spark.sql.sources.resolvedatasource$.apply(ddl.scala:269)
位于org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
位于py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
在py4j.Gateway.invoke处(Gateway.java:259)
位于py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
在py4j.commands.CallCommand.execute(CallCommand.java:79)
在py4j.GatewayConnection.run处(GatewayConnection.java:207)
位于java.lang.Thread.run(未知源)

因此,如果Spark的早期版本未在驱动程序类路径上设置,则可能会出现此问题,因此您也可以尝试将jar添加到驱动程序类路径中(可以使用
--驱动程序类路径
指定)。。我不太熟悉在Windows系统上部署,但您可能还希望按照中的建议在
conf/spark env.cmd
中设置属性。

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

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

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

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

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