2017-10-23 1 views
0

Ab Oktober 2017 ist es möglich, Sparklyr Spark Data Frames in SQL Server zu schreiben?Laden von Tabellen in SQL Server von SparklyR

habe ich diesen Fehler:

> 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"’ 

ich zur Zeit läuft:

  • dplyr 0.7.4
  • sparklyr 0.6.3
  • Spark-2.0.1 für Hadoop gebaut 2.7 .3

Es gibt etwas Ähnliches für C Assandra in der wunderbaren crassy Paket, aber nicht sicher, ob es einen Connector oder eine Methode für SQL Server gibt. Vielen Dank!

Gelöst !!!

Ich habe den JDBC-Treiber für SQL Server verwendet. Ich hatte jdk 1.8, so dass bedeutete, dass ich den Treiber für Java 8 auf allen Knoten verwendet:

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

Ich habe dies in $SPARK_HOME/conf/spark-defaults.conf.

Ich melde mich normalerweise mit der Kerberos-Authentifizierung am SQL-Server an, aber da dies nicht auf allen Knoten meines Testclusters eingerichtet war, habe ich eine SQL-Anmeldung für die gewünschte Datenbank erstellt (Administrator erforderlich) und über diesen Benutzernamen verbunden. bestehen.

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") 
) 

Wenn Sie Kerberos-Authentifizierung verwenden (und laufen auf Linux) als solche aussehen:

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") 
) 

Für Windows, beinhalten nicht nur die authenticationScheme Option.

Vielen Dank an @ user6910411 !!!!

Antwort

1

Sie können die Funktion sparklyr::spark_write_jdbc verwenden, um Daten direkt von Spark zu schreiben, ohne Daten in R zu sammeln. Damit es funktioniert, benötigen Sie an appropriate JDBC driver, das auf den Treiber- und Worker-Knoten verfügbar ist.

Unter der Annahme, Treiber bereits enthalten mit spark.jars.packages, werden Sie etwas ähnliches müssen:

spark_write_jdbc(
    df, "some_name", 
    options=list(
    url="jdbc:sqlserver://...", 
    driver="com.microsoft.sqlserver.jdbc.SQLServerDriver")) 
Verwandte Themen