Подключение от Spark/pyspark к PostgreSQL

Я установил Spark на машине Windows и хочу использовать его через Spyder. После некоторого устранения неполадок основы, похоже, работают:

import os

os.environ["SPARK_HOME"] = "D:AnalyticsSparkspark-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:AnalyticsSparkspark-1.4.0-bin-hadoop2.6README.md")
textFile.count()
textFile.filter(lambda line: "Spark" in line).count()

sc.stop()

это работает, как ожидалось. Теперь я хочу подключиться к Postgres9.3 база данных работает на одном сервере. Я загрузил драйвер JDBC отсюда здесь и поместите его в папку D:AnalyticsSparkspark_jars - ... Затем я создал новый файл D:AnalyticsSparkspark-1.4.0-bin-hadoop2.6confspark-defaults - ... conf содержащая эту строку:

spark.driver.extraClassPath        'D:AnalyticsSparkspark_jarspostgresql-9.3-1103.jdbc41.jar'

Я запустил следующий код для проверки соединения

import os

os.environ["SPARK_HOME"] = "D:AnalyticsSparkspark-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()

но я получаю следующую ошибку:

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)

как я могу проверить, загрузил ли я право .файл jar или где еще ошибка может быть?

2 ответов


Я пробовал переменную среды SPARK_CLASSPATH, но она не работает с Spark 1.6.

другие ответы из сообщений, как показано ниже, предложили добавить аргументы команды pyspark, и это работает.

не удается подключиться к postgres с помощью jdbc в оболочке pyspark

Apache Spark: соединение JDBC не работает

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

удалить spark-по умолчанию.conf и добавьте SPARK_CLASSPATH в системную среду в python следующим образом:

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