2015-06-19 9 views
5

Ich habe Spark auf einem Windows-Rechner installiert und möchte es über Spyder verwenden.Verbindung von Spark/pyspark zu PostgreSQL

läuft Dieses
import os 

os.environ["SPARK_HOME"] = "D:\Analytics\Spark\spark-1.4.0-bin-hadoop2.6" 

from pyspark import SparkContext, SparkConf 
from pyspark.sql import SQLContext 

spark_config = SparkConf().setMaster("local[8]") 
sc = SparkContext(conf=spark_config) 
sqlContext = SQLContext(sc) 

textFile = sc.textFile("D:\\Analytics\\Spark\\spark-1.4.0-bin-hadoop2.6\\README.md") 
textFile.count() 
textFile.filter(lambda line: "Spark" in line).count() 

sc.stop() 

wie erwartet: Nachdem einige der Grundlagen zur Fehlerbehebung zu funktionieren scheint. Ich möchte jetzt eine Verbindung zu einer Postgres9.3-Datenbank herstellen, die auf demselben Server ausgeführt wird. Ich habe den JDBC-Treiber von hier here heruntergeladen und in den Ordner D: \ Analytics \ Spark \ spark_jars abgelegt. Ich habe erstellt dann eine neue Datei D: \ Analytics \ Funken \ Funken 1.4.0-bin-hadoop2.6 \ conf \ Funken defaults.conf enthält diese Zeile:

spark.driver.extraClassPath  'D:\\Analytics\\Spark\\spark_jars\\postgresql-9.3-1103.jdbc41.jar' 

ich lief habe folgender Code testen Sie die Verbindung

import os 

os.environ["SPARK_HOME"] = "D:\Analytics\Spark\spark-1.4.0-bin-hadoop2.6" 

from pyspark import SparkContext, SparkConf 
from pyspark.sql import SQLContext 

spark_config = SparkConf().setMaster("local[8]") 
sc = SparkContext(conf=spark_config) 
sqlContext = SQLContext(sc) 

df = (sqlContext 
    .load(source="jdbc", 
      url="jdbc:postgresql://[hostname]/[database]?user=[username]&password=[password]", 
      dbtable="pubs") 
) 
sc.stop() 

Aber ich erhalte die folgende Fehlermeldung:

Py4JJavaError: An error occurred while calling o22.load. 
: java.sql.SQLException: No suitable driver found for  jdbc:postgresql://uklonana01/stonegate?user=analytics&password=pMOe8jyd 
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:265) 
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) 

Wie kann ich prüfen, ob ich die richtige .jar-Datei oder wo sonst der Fehler heruntergeladen haben könnte kommen?

+0

Ich habe versucht postgresql-9.3-1103.jdbc41.jar und nicht wenige andere .jar-Dateien. Ich habe auch versucht, '# s.environ [" SPARK_CLASSPATH "] =" D: \\ Analytics \\ Spark \\ spark_jars \\ * "' hinzuzufügen, aber dies ergibt den Fehler 'Py4JJavaError: Beim Aufruf von None.org.apache ist ein Fehler aufgetreten .spark.api.java.JavaSparkContext. : org.apache.spark.SparkException: Sowohl spark.driver.extraClassPath als auch SPARK_CLASSPATH gefunden. Verwenden Sie nur das vorherige. Dies bedeutet, dass die obige Version funktionieren sollte. – phildeutsch

Antwort

1

entfernen Funken defaults.conf und die SPARK_CLASSPATH an die Systemumgebung in Python wie folgt hinzu:

os.environ["SPARK_CLASSPATH"] = 'PATH\\TO\\postgresql-9.3-1101.jdbc41.jar' 
Verwandte Themen