es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo manejar la opción mergeschema para diferentes tipos de datos en Databricks?

import org.apache.spark.sql.types._
import spark.implicits._

scala
val data = Seq(("James","Sales",34))
val df1 = data.toDF("name","dept","age")
df1.printSchema()
df1.write.option("mergeSchema", "true").format("delta").save("/location")

scala
val data2 = Seq(("Tiger","Sales","34") )
var df2 = data2.toDF("name","dept","age")
df2.printSchema()
df2.write.option("mergeSchema", "true").format("delta").save("/location")
df2.show(false)

Cuando escribimos el dataframe df2, falla porque en la tabla delta, la columna age es de tipo IntegerType y en el segundo dataframe df2 la columna age es de tipo StringType. ¿Cómo manejamos esta situación para que el código maneje este caso sin problemas?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para manejar una situación en la que los tipos de datos de las columnas en los dataframes que se escriben en una tabla delta no coinciden, podemos utilizar la función cast para convertir los tipos de datos de las columnas de df2 y que coincidan con los de df1 antes de escribir en la tabla delta.

    import org.apache.spark.sql.functions.col
    
    val data2 = Seq(("Tiger","Sales","34"))
    var df2 = data2.toDF("name","dept","age")
    
    df2 = df2.select(col("name"), col("dept"), col("age").cast(IntegerType))
    
    df2.write.option("mergeSchema", "true").format("delta").save("/ubicación")
    

    Al usar la función cast, convertimos la columna “age” de df2 a IntegerType para que coincida con la de df1 antes de escribir en la tabla delta. Esto garantizará que los tipos de datos de las columnas en la tabla delta sean consistentes y no causarán errores al consultar los datos posteriormente.

Comments are closed.