PyCharm - невозможно найти ошибку драйвера при подключении к oracle БД - PullRequest
0 голосов
/ 28 апреля 2020

Я установил Apache Spark (spark-2.4.5-bin-hadoop2.7) в мою Ma c:

/Users/xxxx/Software/

Кроме того, я скачал ojdbc6.jar в следующем путь:

/Users/xxxx/Software/spark/jars

Ниже приведены обновления, которые я сделал в переменных среды:

export SPARK_HOME=/Users/xxxx/Software/spark
export SPARK_CLASSPATH=/Users/xxxx/spark_env/ojdbc6.jar
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
alias python='python3'
export PYSPARK_PYTHON=python3

Из Терминала я вызвал pyspark и запустил следующие команды, и он отлично работает.

conn_url = "jdbc:oracle:thin:@//xxx.xxx.xxx.xx:1521/USER”
 df = spark.read.format("jdbc").option("url",conn_url).option("drive","oracle.jdbc.driver.OracleDriver").option("dbtable”,”table_name”).option("user”,”xxxx”).option("password”,”xxxx”).load()

Я успешно могу выполнить запрос к БД.

Теперь я пытаюсь сделать подобное кодирование с использованием PYCHARM более программно.

Конфигурации PyCharm: В Preferences-> Project Структура Я добавил содержимое Root, как показано ниже:

/Users/xxxx/Software/spark/jars/ojdbc6.jar
Users/xxxx/Software/spark-2.4.5-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip 
/Users/xxxx/Software/spark-2.4.5-bin-hadoop2.7/python/lib/pyspark.zip 

Затем, когда я запускаю «main.py» (в котором есть код для подключения и запроса к БД), я получаю следующую ошибку:

Status: FailureError: An error occurred while calling o71.load.
: java.sql.SQLException: No suitable driver
    at java.sql/java.sql.DriverManager.getDriver(DriverManager.java:298)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$6.apply(JDBCOptions.scala:105)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$6.apply(JDBCOptions.scala:105)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:104)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:35)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:282)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.base/java.lang.Thread.run(Thread.java:835)

1 Ответ

0 голосов
/ 28 апреля 2020

Добавив jar в контекст проекта root, это не сработает, потому что spark будет искать этот jar в папке $SPARK_HOME/jars. Для этого есть несколько вариантов:

  1. В вашем основном скрипте python вы можете определить его следующим образом: os.environ['PYSPARK_SUBMIT_ARGS'] = "--jars file:///<path-to-driver>/ojdbc-<version>.jar pyspark-shell"

  2. добавьте флягу вашего драйвера в папку $SPARK_HOME/jars.

...