从 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"’
我目前 运行:
- dplyr 0.7.4
- sparklyr 0.6.3
- 为 Hadoop 2.7.3 构建的 Spark 2.0.1
精彩的 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"))
截至 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"’
我目前 运行:
- dplyr 0.7.4
- sparklyr 0.6.3
- 为 Hadoop 2.7.3 构建的 Spark 2.0.1
精彩的 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"))