2015-04-16 7 views
7

Sto usando grappolo standalone sul mio Windows locali e cercando di caricare dati da uno dei nostri server utilizzando seguente codice -Non in grado di connettersi a postgres usando JDBC in guscio pyspark

from pyspark.sql import SQLContext 
sqlContext = SQLContext(sc) 
df = sqlContext.load(source="jdbc", url="jdbc:postgresql://host/dbname", dbtable="schema.tablename") 

Ho impostato lo SPARK_CLASSPATH come -

os.environ['SPARK_CLASSPATH'] = "C:\Users\ACERNEW3\Desktop\Spark\spark-1.3.0-bin-hadoop2.4\postgresql-9.2-1002.jdbc3.jar" 

Durante l'esecuzione di sqlContext.load, getta l'errore di nota "Nessun driver adatto trovato per JDBC: PostgreSQL". Ho provato a cercare sul web, ma non sono riuscito a trovare una soluzione.

+0

Il suo "Nessun driver adatto trovato per jdbc: postgresql" solo .. domanda aggiornata. –

+1

Bene in questo caso il file jar richiesto con il driver non è disponibile. Il file jar richiesto è –

+0

, ma in qualche modo SPARK non è in grado di riconoscerlo. C'è qualche problema riguardante SPARK_CLASSPATH. Non sono sicuro su come impostare SPARK_CLASSPATH. –

risposta

1

Ho avuto lo stesso problema con mysql e non sono mai riuscito a farlo funzionare con l'approccio SPARK_CLASSPATH. Comunque sono riuscito a lavorare con argomenti extra della riga di comando, vedere la risposta a this question

Per evitare di dover scegliere attraverso per farlo funzionare, ecco cosa devi fare:

pyspark --conf spark.executor.extraClassPath=<jdbc.jar> --driver-class-path <jdbc.jar> --jars <jdbc.jar> --master <master-URL> 
+0

Uhm, la riga di codice è incompleta, giusto? Quali bandiere hanno bisogno di un valore dopo di loro? – Sebastialonso

+0

sì, il markup è stato perso in qualche modo - l'ho modificato di nuovo in – 8forty

+0

Molto apprezzato. Grazie. – Sebastialonso

1

Può essere che sarà utile.

Nel mio ambiente SPARK_CLASSPATH contiene percorso al connettore PostgreSQL

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

sparkClassPath = os.getenv('SPARK_CLASSPATH', '/path/to/connector/postgresql-42.1.4.jar') 

# Populate configuration 
conf = SparkConf() 
conf.setAppName('application') 
conf.set('spark.jars', 'file:%s' % sparkClassPath) 
conf.set('spark.executor.extraClassPath', sparkClassPath) 
conf.set('spark.driver.extraClassPath', sparkClassPath) 
# Uncomment line below and modify ip address if you need to use cluster on different IP address 
#conf.set('spark.master', 'spark://127.0.0.1:7077') 

sc = SparkContext(conf=conf) 
sqlContext = SQLContext(sc) 

url = 'postgresql://127.0.0.1:5432/postgresql' 
properties = {'user':'username', 'password':'password'} 

df = DataFrameReader(sqlContext).jdbc(url='jdbc:%s' % url, table='tablename', properties=properties) 

df.printSchema() 
df.show() 

Questo pezzo di codice consente di utilizzare pyspark in cui è necessario. Ad esempio, l'ho usato nel progetto Django.