截止至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
问题解决了!
我使用了 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!!!