Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从数据库将表加载到SQL Server_Sql Server_R_Apache Spark_Dplyr_Sparklyr - Fatal编程技术网

Sql server 从数据库将表加载到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

截至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 Server", "character", "tbl_spark"’
我目前正在运行:

  • dplyr 0.7.4
  • 第0.6.3节
  • Spark 2.0.1为Hadoop 2.7.3构建
Cassandra在奇妙的
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"))