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.

¿El método spark.sql.functions.typedLit admite Map[String, Any]?

Tengo un mapa de tipo Map[String, String] que quiero agregar dentro de otro mapa2 de tipo Map[String, Any]. Más tarde, este mapa2 se añadirá como una columna en un dataframe.

Cuando intento agregar map2 como una columna usando spark.sql.functions.typedLit, falla con el siguiente error:

Tipo de literal no admitido class scala.collection.mutable.HashMap Map...

¿Alguna sugerencia para lograr esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes usar MapType para definir el esquema de la columna en el dataframe. Aquí están los pasos:

    1. Define el esquema de la columna utilizando la función MapType:
    import org.apache.spark.sql.types._
    
    val mapSchema = MapType(StringType, StringType)
    val columnSchema = StructType(
      StructField("map2", mapSchema) :: Nil
    )
    
    1. Convierte tu mapa en un MapType utilizando la función create_map de org.apache.spark.sql.functions:
    import org.apache.spark.sql.functions._
    
    val map = Map("key1" -> "value1", "key2" -> "value2")
    val mapColumn = create_map(lit(map.keys.toSeq), lit(map.values.toSeq))
    
    1. Crea un dataframe con el esquema definido:
    val df = spark.emptyDataFrame.withColumn("column_name", typedLit(Map.empty[String, Any])).schema(columnSchema)
    
    1. Agrega la mapColumn como una columna al dataframe:
    val dfWithMapColumn = df.withColumn("map2", mapColumn)
    

    Ahora tienes un dataframe con una columna map2 de tipo Map[String, String].

Comments are closed.