我试图在postgres数据库中插入几行dataframe,并在此dataframe中插入生成的主键。我要这么做:
def createConnexionRds():
host = "..."
database = "..."
conn = pg8000.connect(
user="...",
host=host,
database=database,
password="...",
ssl_context=True)
return conn
def insertProcess(r):
conn = createConnexionRds()
insertResults = conn.run(r["tmp_query"])
insertResult = "NOT_INSERTED"
if len(insertResults) > 0:
insertResult = insertResults[0][0]
conn.commit()
conn.close()
return insertResult
def insertPerQuery(myDataframe):
query = sf.lit("insert into tabAAA (colBBB) values ('valueCCC') returning idAAA")
myDataframe = myDataframe.withColumn("tmp_query", query)
myDataframe = myDataframe.drop("idAAA")
rdd=myDataframe.rdd.map(
lambda x:(*x, insertProcess(x))
)
myDataframe = myDataframe.withColumn("idAAA", sf.lit(""))
myDataframe = sqlContext.createDataFrame(rdd,myDataframe.schema)
myDataframe = myDataframe.drop("tmp_query")
return myDataframe
df = insertPerQuery(df)
# df.show(100, False)问题是当我评论df.show(.)(最后一行),插入不是进程。如果启动第二个df.show(),则插入是重复的。
这是给AWS胶水用的。
谢谢。
发布于 2022-08-25 10:08:01
这是由于懒惰-评价-天性的火花。只有在调用操作时,代码才会在执行程序上执行,在本例中是.show()。
https://stackoverflow.com/questions/73485564
复制相似问题