从 SparklyR 将表加载到 SQL 服务器

Load tables into SQL Server from SparklyR

截至 2017 年 10 月,是否可以将 Sparklyr Spark 数据帧写入 SQL 服务器?

我收到这个错误:

> 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"’

我目前 运行:

精彩的 crassy 包中有与 Cassandra 类似的东西,但不确定 SQL 服务器是否有连接器或方法。谢谢!

已解决!!!

我为 SQL 服务器使用了 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 服务器,但由于没有在我的测试集群的所有节点上设置,我为感兴趣的数据库创建了一个 SQL 登录(必需管理员)并通过 username/pass 连接。

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!!!!

您可以使用驱动程序和工作程序节点上可用的 sparklyr::spark_write_jdbc function to write data directly from Spark without collecting data in R. To make it work, you'll need an appropriate JDBC driver

假设已经使用 spark.jars.packages 包含驱动程序,您将需要类似于:

spark_write_jdbc(
  df, "some_name", 
  options=list(
    url="jdbc:sqlserver://...",
    driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"))