Загрузить таблицы в SQL Server из SparklyR

Можно ли по состоянию на октябрь 2017 г. записывать фреймы данных 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
  • спарклир 0.6.3
  • Spark 2.0.1 создан для Hadoop 2.7.3

Что-то подобное есть для Cassandra в замечательном пакете crassy, но я не уверен, есть ли соединитель или метод для SQL Server. Спасибо!

РЕШЕНО !!!

Я использовал драйвер jdbc для SQL-сервера. У меня был jdk 1.8, значит, я использовал драйвер для Java 8 на всех узлах:

spark.jars.packages com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8

Я поместил это в $SPARK_HOME/conf/spark-defaults.conf.

Обычно я вхожу на 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 !!!!


person Zafar    schedule 23.10.2017    source источник


Ответы (1)


Вы можете использовать функцию sparklyr::spark_write_jdbc для записи данных непосредственно из Spark без сбора данных в R. To чтобы он работал, вам понадобится соответствующий драйвер JDBC, доступный на драйверные и рабочие узлы.

Предполагая, что драйвер уже включен с использованием spark.jars.packages, вам понадобится что-то похожее на:

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