2015-04-16 4 views
7

J'utilise groupe autonome sur mes fenêtres locales et en essayant de charger les données d'un de notre serveur en utilisant le code suivant -Pas en mesure de se connecter à postgres en utilisant jdbc en coquille pyspark

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

J'ai mis le SPARK_CLASSPATH comme -

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

Pendant l'exécution sqlContext.load, il jette erreur la mention "Aucun pilote approprié trouvé pour jdbc: postgresql". J'ai essayé de chercher sur le web, mais je n'ai pas trouvé de solution.

+0

Son "Aucun pilote approprié trouvé pour jdbc: postgresql" seulement .. question mise à jour. –

+1

Bien dans ce cas, le fichier jar requis avec le pilote n'est pas disponible. –

+0

fichier jar requis est présent, mais de toute façon SPARK n'est pas capable de le reconnaître. Il existe un problème concernant SPARK_CLASSPATH. Je ne suis pas sûr sur la façon de définir le SPARK_CLASSPATH. –

Répondre

1

J'ai rencontré le même problème avec mysql, et je n'ai jamais réussi à le faire fonctionner avec l'approche SPARK_CLASSPATH. Cependant, je l'ai reçu de travailler avec des arguments de ligne de commande supplémentaires, voir la réponse à this question

Pour éviter d'avoir à cliquer pour le faire fonctionner, voici ce que vous avez à faire:

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

Uhm, la ligne de code est incomplète, non? Quels drapeaux ont besoin d'une valeur après eux? – Sebastialonso

+0

oui, le balisage a été perdu en quelque sorte - je l'ai édité en – 8forty

+0

Très apprécié. Je vous remercie. – Sebastialonso

1

mai que ce soit sera utile.

Dans mon environnement SPARK_CLASSPATH contient chemin au connecteur 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() 

Ce morceau de code permet d'utiliser pyspark où vous avez besoin. Par exemple, je l'ai utilisé dans le projet Django.