Spark Sql Connection - PullRequest
       56

Spark Sql Connection

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


Я пытаюсь подключить спарк с базой данных oracle в pyspark, но получаю ошибку драйвера, может кто-нибудь помочь мне в этом. Я новичок в Spark и только начал учиться. Ниже приведен мой код

import pyspark

sc = pyspark.SparkContext('local[*]')
SqlContext = pyspark.SQLContext(sc)
Driver = 'C:\Hadoop\drivers\ojdbc14.jar'
OracleConnection = 'jdbc:oracle:thin:hr/hr@localhost:1521/xe'
Query = 'select * from employees'
OrcDb = SqlContext.read.format('jdbc') \
    .option('url', OracleConnection) \
    .option('dbtable', Query) \
    .option('driver', Driver) \
    .load()

OrcDb.printSchema()

Ниже приведена ошибка

Файл "C: / Users / Macaulay / PycharmProjects / Spark / Spark SqlOracle .py" , строка 8, в OrcDb = SqlContext.read.format ('jdb c') \ File "C: \ Hadoop \ Spark \ spark-3.0.0-preview2-bin-hadoop2.7 \ python \ lib \ pyspark.zip \ pyspark \ sql \ readwriter.py ", строка 166, в загрузочном файле" C: \ Hadoop \ Spark \ spark-3.0.0-preview2-bin-hadoop2.7 \ python \ lib \ py4j-0.10 .8.1-sr c .zip \ py4j \ java_gateway.py ", строка 1285, в вызов Файл" C: \ Hadoop \ Spark \ spark-3.0.0-preview2-bin-hadoop2 .7 \ python \ lib \ pyspark.zip \ pyspark \ sql \ utils.py ", строка 98, в файле deco" C: \ Hadoop \ Spark \ spark-3.0.0-preview2-bin-hadoop2.7 \ python \ lib \ py4j-0.10.8.1-sr c .zip \ py4j \ protocol.py ", строка 326, в get_return_value py4j.protocol.Py4JJavaError: Произошла ошибка при вызове o29.load. : java .lang.ClassNotFoundException: C: \ Hadoop \ drivers \ ojdbc14.jar в java. net .URLClassLoader $ 1.run (неизвестный источник) в java. net .URLClassLoader $ 1. выполнить (Неизвестный источник) в java .security.AccessController.doPrivileged (собственный метод) в java. net .URLClassLoader.findClass (Неизвестный источник) в java .lang.ClassLoader.loadClass (Неизвестный источник) в java .lang.ClassLoader.loadClass (Неизвестный источник) в орг. apache .spark. sql .execution.datasources.jdb c .DriverRegistry $ .register (DriverRegistry. scala: 45) в орг. . apache .spark. sql .execution.datasources.jdb c .JDBCOptions. $ Anonfun $ driverClass $ 1 (JDBCOptions. scala: 99) в орг. apache .spark. sql .execution .datasources.jdb c .JDBCOptions. $ anonfun $ driverClass $ 1 $ адаптирован (JDBCOptions. scala: 99) в org. apache .spark. sql .execution.datasources.jdb c .JDBCOptions $ $ Lambda $ 729 / 1345147223.apply (Неизвестный источник) в scala .Option.foreach (Option. scala: 407) в org. apache .spark. sql .execution.datasources.jdb c. JDBCOptions. (JDBCOpt ion. scala: 99) в орг. apache .spark. sql .execution.datasources.jdb c .JDBCOptions. (JDBCOptions. scala: 35) в орг. apache .spark. sql .execution.datasources.jdb c .JdbcRelationProvider.createRelation (JdbcRelationProvider. scala: 32) в org. apache .spark. sql .execution.datasources.DataSource.resolveRelation (DataSource. *: 339) в орг. apache .spark. sql .DataFrameReader.loadV1Source (DataFrameReader. scala: 240) в орг. apache .spark. sql .DataFrameReader. $ Anonfun $ load $ 2 ( DataFrameReader. scala: 229) в орг. apache .spark. sql .DataFrameReader $$ Lambda $ 719 / 1893144191.apply (неизвестный источник) в scala .Option.getOrElse (Опция. scala: 189 ) в орг. apache .spark. sql .DataFrameReader.load (DataFrameReader. scala: 229) в орг. apache .spark. sql .DataFrameReader.load (DataFrameReader. scala: 179 ) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) в java .lan g.reflect.Method.invoke (неизвестный источник) в py4j.reflection.MethodInvoker.invoke (MethodInvoker. java: 244) в py4j.reflection.ReflectionEngine.invoke (ReflectionEngine. java: 357) в py4j.Gate. вызвать (Gateway. java: 282) в py4j.commands.AbstractCommand.invokeMethod (AbstractCommand. java: 132) в py4j.commands.CallCommand.execute (CallCommand. java: 79) в py4j.GatewayConnection.run (GatewayConnection. java: 238) в java .lang.Thread.run (Неизвестный источник)

1 Ответ

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

Нашел проблему. Драйвер JDB C должен быть помещен в каталог Spark Jar , и вместо указания пути к драйверу мы должны указать служебное имя драйвера. Этот подход решил проблему.

Ниже приведен код,

import pyspark
from pyspark.sql.session import SparkSession

sc = pyspark.SparkContext('local[*]')
SqlContext = pyspark.SQLContext(sc)
spark = SparkSession(sc)
Driver = 'oracle.jdbc.driver.OracleDriver'   # Driver's service name
OracleConnection = 'jdbc:oracle:thin:@//localhost:1521/xe'
User = 'hr'
Password = 'hr'
Query = 'select * from employees'
OrcDb = spark.read.format('jdbc') \
    .option('url', OracleConnection) \
    .option('dbtable', Query) \
    .option('user', User) \
    .option('Password', Password) \
    .option('driver', Driver) \
    .load()
OrcDb.printSchema()
...