使用Spark将数据插入Microsoft SQL Server

时间:2016-07-27 18:21:13

标签: apache-spark spark-streaming

我正在尝试使用以下Jdbc方法使用spark将数据插入到sql server中。

选项1:

    prop.put("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
dataf.write.mode(org.apache.spark.sql.SaveMode.Append).jdbc(url,table_name, prop) 

表已创建。附加新数据。工作错误以及以下异常

  

主题" main"

中的异常      
    

com.microsoft.sqlserver.jdbc.SQLServerException:CREATE TABLE     数据库中的权限被拒绝

  

问题是:Why create table permission is required for appending the data?

选项2:

    prop.put("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils.saveTable(dataf, url, table_name, prop) 

以上命令使用spark-shell。当在scala代码中使用相同的内容并使用依赖项打包时给出以下异常

  

线程中的异常" main" java.sql.SQLException:没有合适的驱动程序           在java.sql.DriverManager.getDriver(DriverManager.java:315)

我尝试设置驱动程序类路径和执行程序类路径,而且--jars仍然没有运气。在驱动程序类路径和--jars中包含sqljdbc4.jar。 将sqljdbc4.jar复制到所有工作节点,但仍然没有运气。

有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:0)

经过大量的搜索和测试,我找到了答案。它可能对某人有用。

  

选项1:这是因为spark 1.5.X中的错误。同样解决了   在1.6.x及更高版本中。由于这个bug,它总是试图创建一个新的   表

     

选项2:这导致因为,给出了类路径上的驱动程序名称   优先级比我们作为参数传递的属性。解决方法   这是创建连接然后调用savetable。

 workaround if you are using spark 1.5.x or lower.
      JdbcUtils.createConnection(url, prop)
       JdbcUtils.saveTable()