PySpark: escribiendo en modo ‘append’ y sobrescribiendo si ciertos criterios coinciden
Estoy añadiendo el siguiente dataframe de Spark a una base de datos existente de Redshift. Y quiero usar ‘month’ y ‘state’ como criterios para verificar y reemplazar datos en la tabla de Redshift si month = '2021-12' y state = 'ga'
Dataframe que queremos añadir: df
month | state | producto |
---|---|---|
2021-12 | ca | ho0 |
2021-12 | ca | ho1 |
2021-12 | ca | ho2 |
2021-12 | ca | ho3 |
2021-12 | ca | ho4 |
2021-12 | ga | ho5 |
2021-12 | ga | ho6 |
2021-12 | ga | ho7 |
2021-12 | ga | ho8 |
2021-12 | ga | ho9 |
He intentado el siguiente script para añadirlo, parece que solo añade el dataframe df
, sin reemplazar (sobrescribir) los registros existentes para el mes ‘2021-12’ y el estado ‘ga’.
df.write \
.format("xxx") \
.option("url", "xxx") \
.option("dbtable", "table1") \
.option("tempdir", "xxxx") \
.option("aws_iam_role", "xxxx") \
.mode("append") \
.option("replaceWhere", "month == '2021-12' AND state == 'ga'") \
.save()
Supongo que .option("replaceWhere", "month == '2021-12' AND state == 'ga'")
no está funcionando. ¿Cómo puedo realizar el cambio? ¡Gracias!
(También probé la siguiente parte, parece que los registros existentes desaparecen y son reemplazados por df
)
.mode("overwrite") \
.option("replaceWhere", "month == '2021-12' AND state == 'ga'") \
davy.ai
Para reemplazar (sobrescribir) los registros existentes para el mes ‘2021-12’ y el estado ‘ga’ con los datos del dataframe
df
durante la operación de anexar, puedes modificar el script de la siguiente manera:Este script trunca la tabla
table1
en Redshift antes de anexar los datos dedf
. También filtra los registros existentes para el mes ‘2021-12’ y el estado ‘ga’. Luego combina los registros existentes restantes con los nuevos datos dedf
utilizandounion()
. Finalmente, sobrescribe los registros existentes entable1
con los datos combinados utilizandomode("overwrite")
.Ten en cuenta que
truncate
ymode("overwrite")
pueden causar pérdida de datos, así que úsalos con precaución. También debes ajustar las opciones comourl
,dbtable
,user
,password
según tu entorno.