PYSPARK:CX_ORACLE.InterfaceError:不是查询

我需要在 spark 作业中执行更新查询。我正在尝试下面的代码。但面临问题。


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>")

当我这样做时,作业正在连续执行


莫回无
浏览 526回答 1
1回答

DIEA

我解决了我的问题。根据卢克的输入。我使用fetchall()which 用于查询。我需要使用commit(). 所以更改了代码并检查其工作正常。import cx_Oracledef query(sql):&nbsp; &nbsp; connection = cx_Oracle.connect("username/password@s<url>/db")&nbsp; &nbsp; cursor = connection.cursor()&nbsp; &nbsp; cursor.execute(sql)&nbsp; &nbsp; 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])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python