El modo de sobrescritura no funciona en spark-sql mientras se agrega datos en db2.
Soy nuevo en Spark y DB2. Tengo un marco de datos conmigo generado a partir de varias fuentes y lo estoy almacenando en una tabla DB2. Estoy utilizando el modo ‘Sobrescribir’ para hacer esto, ya que quiero que el registro existente se elimine automáticamente sin ninguna condición.
Al ejecutar este comando –
df.write.mode(“sobrescribir”).jdbc(fullJdbcUrl, tableName, props)
arroja este error –
com.ibm.db2.jcc.am.SqlSyntaxErrorException: Error SQL DB2: SQLCODE = -551, SQLSTATE = 42501
Entiendo los códigos de error.
Según el ticket https://issues.apache.org/jira/browse/SPARK-16463, han actualizado la funcionalidad para truncar o eliminar la tabla mientras se sobrescribe los datos, pero cuando lo pruebo, todavía no funciona.
df.write.option(“recortar”, “verdadero”).mode(“sobrescribir”).jdbc(fullJdbcUrl, tableName, props)
arroja este error –
com.ibm.db2.jcc.am.SqlSyntaxErrorException: Error SQL DB2: SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = END-OF-STATEMENT;
¿Me he perdido algo en el código o han agregado una nueva funcionalidad?
También estaba buscando en – DataFrameWriterV2 (https://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/DataFrameWriterV2.html) pero no estoy seguro de cómo implementarlo.
La versión de Spark es – 3.1.1.
davy.ai
Parece que estás teniendo problemas con la API
DataFrameWriterV2
. Parece que la opcióntruncate
no está soportada en la versión de Spark que estás utilizando (3.1.1). Es posible que desees intentar actualizar a una versión más nueva de Spark para ver si eso resuelve el problema.Alternativamente, podrías intentar utilizar el comando
df.write.mode("overwrite").jdbc()
, pero tendrías que eliminar manualmente los registros existentes en la tabla DB2 antes de ejecutar el comando.