2016-01-20 5 views
0

EDIT: Смотрите правку в концеСвеча не может найти драйвер Postgres JDBC

Прежде всего, я использую Спарк 1.5.2 на Amazon EMR и с помощью Amazon RDS для моей базы данных Postgres. Во-вторых, я полный новичок в этом мире Spark и Hadoop и MapReduce.

По существу моя проблема такая же, как для этого парня: java.sql.SQLException: No suitable driver found when loading DataFrame into Spark SQL

Так dataframe загружается, но когда я пытаюсь оценить его (делать df.show(), где ДФ является dataframe) дает мне ошибка:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://mypostgres.cvglvlp29krt.eu-west-1.rds.amazonaws.com:5432/mydb 

Я должен отметить, что я начинаю искру, как это:

spark-shell --driver-class-path /home/hadoop/postgresql-9.4.1207.jre7.jar 

решения предполагают доставку банку на рабочие узлы и каким-то образом устанавливают путь к классам, что я действительно не понимаю, как это сделать. Но потом они говорят, что, по-видимому, проблема была исправлена ​​в Spark 1.4, и я использую 1.5.2 и все еще имею эту проблему, так что происходит?

EDIT: Похоже, я решил этот вопрос, но я до сих пор не совсем понимаю, почему это работает, и самое выше не делает, поэтому я думаю, мои вопросы теперь почему делает это:

spark-shell --driver-class-path /home/hadoop/postgresql-9.4.1207.jre7.jar --conf spark.driver.extraClassPath=/home/hadoop/postgresql-9.4.1207.jre7.jar --jars /home/hadoop/postgresql-9.4.1207.jre7.jar 

решить проблему? Я просто добавил путь в качестве параметра в еще несколько флагов.

ответ

3

spark-shell --driver-class-path .... --jars ... работает, потому что все файлы jar, перечисленные в --jars, автоматически распределяются по кластеру.

В качестве альтернативы можно использовать

spark-shell --packages org.postgresql:postgresql:9.4.1207.jre7 

и указать класс драйвера в качестве опции для DataFrameReader/DataFrameWriter

val df = sqlContext.read.format("jdbc").options(Map(
    "url" -> url, "dbtable" -> table, "driver" -> "org.postgresql.Driver" 
)).load() 

или даже вручную скопировать необходимые банки для рабочих и разместить их где-то на CLASSPATH.

Смежные вопросы