【问题标题】:insert data into Microsoft SQL server using Spark使用 Spark 将数据插入 Microsoft SQL Server
【发布时间】:2016-07-27 18:21:12
【问题描述】:

我正在尝试使用以下 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: 创建表 数据库中的权限被拒绝

问题是: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 复制到所有工作节点以及仍然没有运气。

对此有什么想法吗?

【问题讨论】:

  • 如果打包后有些东西不起作用,那么构建定义和提交命令会很有用。
  • 我正在使用 spark-submit 并且插入到 hive 表工作正常。唯一的问题是 sql server。

标签: apache-spark spark-streaming


【解决方案1】:

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

选项 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()

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 2020-10-29
    • 1970-01-01
    • 2020-01-28
    • 2020-09-09
    • 2017-01-07
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多