我正在尝试使用以下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复制到所有工作节点,但仍然没有运气。
有关于此的任何想法吗?
答案 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()