Sql server 从数据库将表加载到SQL Server
截至2017年10月,是否可以将Sparkyr Spark数据帧写入SQL Server 我得到了这个错误:Sql server 从数据库将表加载到SQL Server,sql-server,r,apache-spark,dplyr,sparklyr,Sql Server,R,Apache Spark,Dplyr,Sparklyr,截至2017年10月,是否可以将Sparkyr 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 Ser
> 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
- 第0.6.3节
- Spark 2.0.1为Hadoop 2.7.3构建
crassy
包中也有类似的功能,但不确定是否有用于SQL Server的连接器或方法。谢谢
解决了
我使用了SQL server的jdbc驱动程序。我有jdk 1.8,这意味着我在所有节点上都使用了Java 8驱动程序:
spark.jars.packages com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8
我把它放在$SPARK\u HOME/conf/SPARK defaults.conf
中
我通常使用kerberos身份验证登录SQL server,但由于测试集群的所有节点上都没有设置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 您可以使用函数直接从Spark写入数据,而无需在R中收集数据。要使其工作,您需要在驱动程序和工作节点上可用
假设已使用spark.jars.packages
包含驱动程序,您将需要类似于:
spark_write_jdbc(
df, "some_name",
options=list(
url="jdbc:sqlserver://...",
driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"))