PYSPARK: CX_ORACLE.InterfaceError: не запрос - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужно выполнить запрос на обновление в искровой работе.я пытаюсь ниже кода.но возникают проблемы.

import cx_Oracle
def query(sql):
    connection = cx_Oracle.connect("username/password@s<url>/db")
    cursor = connection.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    return result
v = [10]
rdd = sc.parallelize(v).coalesce(1)
rdd.foreachPartition(lambda x : [query("UPDATE db.tableSET MAPPERS ="+str(i)+" WHERE TABLE_NAME = 'table_name'") for i in x])

когда я выполняю вышеуказанный процесс, я получаю ошибку ниже.

cx_Oracle.InterfaceError: not a query

Я пытался обновить вручную, используя приведенный ниже код.

result = query("<update query>")

когда я это делаю, работа выполняется постоянно

1 Ответ

0 голосов
/ 14 ноября 2018

Я решил свою проблему. Согласно входам Люка. Я использовал fetchall(), который используется для запросов. мне нужно использовать commit(). поэтому изменил код и проверил его работоспособность.

import cx_Oracle
def query(sql):
    connection = cx_Oracle.connect("username/password@s<url>/db")
    cursor = connection.cursor()
    cursor.execute(sql)
    result = connection.commit()
v = [10]
rdd = sc.parallelize(v).coalesce(1)
rdd.foreachPartition(lambda x : [query("UPDATE db.tableSET MAPPERS ="+str(i)+"WHERE TABLE_NAME = 'table_name'") for i in x])
...