2015-08-19 6 views
5

Ich möchte eine Tabelle von SQL-Server importieren, um lokal mit JDBC-Treiber zu funken und Spark sql darüber zu starten. Ich heruntergeladen sqljdbc für SQL Server und hinzugefügt, um diese Zeile zu der spark-env.sh im conf:Importieren Sie Daten von SQL-Server, um lokal zu funken

SPARK_CLASSPATH= "C:/Program Files/Microsoft SQL Server/sqljdbc_4.0/enu/sqljdbc4.jar" ./bin/spark-shell 

wie von here

Und diese Linie verwenden, um die Daten zu laden

df = sqlContext.load(source="jdbc", url="jdbc:sqlserver:dd", dbtable="Reporting.dbo.datatable") 

Allerdings wirft es einen Fehler wie:

Py4JJavaError: An error occurred while calling o28.load. 
: java.sql.SQLException: No suitable driver found for jdbc:sqlserver:PC-BFS2 
     at java.sql.DriverManager.getConnection(Unknown Source) 
     at java.sql.DriverManager.getConnection(Unknown Source) 
     at org.apache.spark.sql.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:118) 
     at org.apache.spark.sql.jdbc.JDBCRelation.<init>(JDBCRelation.scala:128) 
     at org.apache.spark.sql.jdbc.DefaultSource.createRelation(JDBCRelation.scala:113) 
     at org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:269) 
     at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231) 
     at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379) 
     at py4j.Gateway.invoke(Gateway.java:259) 
     at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133) 
     at py4j.commands.CallCommand.execute(CallCommand.java:79) 
     at py4j.GatewayConnection.run(GatewayConnection.java:207) 
     at java.lang.Thread.run(Unknown Source) 

Antwort

0

So können frühere Versionen von Spark dieses Problem haben, wenn es nicht auch für den Treiberklassenpfad festgelegt ist. Sie können also versuchen, das JAR-Objekt ebenfalls zum Klassenpfad der Treiber hinzuzufügen (der mit --driver-class-path angegeben werden kann). Ich bin nicht sehr vertraut mit der Bereitstellung auf Windows-Systemen, aber Sie möchten vielleicht auch Ihre Eigenschaften in conf/spark-env.cmd wie in http://spark.apache.org/docs/latest/configuration.html vorgeschlagen festlegen.

0

Fügen Sie folgende Zeile defaults.conf funken zu

spark.driver.extraClassPath  "C:/Program Files/Microsoft SQL Server/sqljdbc_4.0/enu/*" 
0

Ein anderer Weg, dies zu tun, wäre die Lage der Fahrer passieren, wenn dabei, wie unten Funken einreichen (es funktioniert gut für mich)

./bin/spark-submit --driver-class-path C:/Program Files/Microsoft SQL Server/sqljdbc_4.0/enu/sqljdbc4.jar --master spark://ip:7077 mycode.py 

Bitte stellen Sie sicher, dass Sie die oben Lage von sqljdbc hinzugefügt haben in $ SPARK_HOME/conf/Funken default.conf und unter Eigenschaft spark.jars

Verwandte Themen