使用SparklyR将表加载到SQL Server

3

截止至2017年10月,是否可以将Sparklyr Spark数据框写入SQL Server?

我遇到了以下错误:

> DBI::dbWriteTable(con, "DZ_test", for_test)
Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘dbWriteTable’ for signature 
‘"Microsoft SQL Server", "character", "tbl_spark"

我目前正在运行以下版本:
  • dplyr 0.7.4
  • sparklyr 0.6.3
  • Spark 2.0.1 版本,构建于 Hadoop 2.7.3
尽管有一个很棒的 crassy 包可以用于 Cassandra 数据库,但不确定是否存在针对 SQL Server 的连接器或方法。谢谢!
问题解决了!
我使用了 SQL Server 的 jdbc 驱动程序。由于我有 jdk 1.8,所以在所有节点上我都使用了适用于 Java 8 的驱动程序。
spark.jars.packages com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8

我把这个配置放在$SPARK_HOME/conf/spark-defaults.conf文件中。
我通常使用Kerberos身份验证登录SQL服务器,但由于我的测试集群不是所有节点都设置了Kerberos身份验证,因此我为所需数据库创建了一个SQL登录名(需要管理员权限),并通过该用户名/密码连接。
spark_write_jdbc(my_sdf, "my_sdf", 
                 options = list(
                   url=paste0("jdbc:sqlserver://cwjensql10.cwjwin.local;",
                              "databaseName=HER_NILM;",
                              "user=HER;",
                              "password=Test1;"),
                   driver="com.microsoft.sqlserver.jdbc.SQLServerDriver")
)

如果想要使用Kerberos身份验证(并且正在运行Linux系统),则应如下操作:
spark_write_jdbc(my_sdf, "my_sdf", 
                 options = list(
                   url=paste0("jdbc:sqlserver://cwjensql10.cwjwin.local;",
                              "databaseName=HER_NILM;",
                              "integratedSecurity=true;",
                              "authenticationScheme=JavaKerberos;"),
                   driver="com.microsoft.sqlserver.jdbc.SQLServerDriver")
)

对于Windows系统,只需不包含authenticationScheme选项。

非常感谢@user6910411!!!

1个回答

3
你可以使用 sparklyr :: spark_write_jdbc 函数直接从 Spark 写入数据,而无需在 R 中收集数据。为了使其正常工作,您需要在驱动程序和工作节点上可用的 适当的 JDBC 驱动程序
假设已经使用 spark.jars.packages 包含了驱动程序,您需要类似以下的代码:
spark_write_jdbc(
  df, "some_name", 
  options=list(
    url="jdbc:sqlserver://...",
    driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接