Я пытаюсь создать фрейм данных pyspark jdb c, используя соединения LDAP из Oracle.
Ниже приведен код, работающий для создания JDB C с нормальным строком соединения, который работал.
creds = {"user":"USER_NAME",
"password":"PASSWORD",
"driver": "oracle.jdbc.OracleDriver"}
connection_string = "jdbc:oracle:thin:@//hostname.com:1521/myint.domain.com"
df = spark_session.read.jdbc(url=connection_string, table=query, properties=creds)
Теперь конфигурации нашей базы данных изменились, и мы должны использовать только аутентификацию на основе LDAP.
Поэтому я попытался изменить connection_string
, как показано ниже.
connection_string = "myint"
Но это выдает ниже проблему.
py4j.protocol.Py4JJavaError: Произошла ошибка при вызове o51.jdb c. : java .lang.NullPointerException
Без Spark я попытался подключиться, используя модуль cx_Oracle
(python модуль для подключения к Oracle) для тестирования, и это сработало.
До:
host = 'myint.domain.com'
ip = 'jdbc:oracle:thin:@//hostname.com'
port = 1521
conn = cx_Oracle.makedsn(ip, port, service_name=host)
db = cx_Oracle.connect('USER_NAME', 'PASSWORD', conn) # giving the conn object
cursor = db.cursor()
cursor.execute("""select * from myschema.mytable fetch first 5 rows only""")
for row in cursor:
print(row)
После:
db = cx_Oracle.connect('USER_NAME', 'PASSWORD', "myint") # Now, just giving only the database
cursor = db.cursor()
cursor.execute("""select * from myschema.mytable fetch first 5 rows only""")
for row in cursor:
print(row)
Мне нужно добиться того же в кадре данных Pyspark JDB C, просто передавая только имя базы данных. Пожалуйста, предложите, что нужно сделать.
Я надеюсь, что этот вопрос может быть применим и для scala искры.