2016-07-27 51 views
0

我正尝试使用下面的Jdbc方法使用spark将数据插入到sql server中。使用Spark将数据插入到Microsoft SQL服务器中

选项1:已创建

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

表。螺纹与下面的异常

异常追加新data.Job错误-ED “主”

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代码中使用并用的依赖关系给予例外下面

异常在线程“主”值java.sql.SQLException包装:没有合适的驱动程序 在java.sql.DriverManager.getDriver(DriverManager.java: 315)

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

对此的任何想法?

+0

如果事情没有包装后工作,然后构建定义,并提交命令将是有益的。 – zero323

+0

我正在使用spark-submit和hive表的插入工作fine.only问题是与SQL服务器。 – yoga

回答

0

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

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

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

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