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 accedo al valor de una columna en un dataframe a través de una UDF en Scala?

Estoy intentando agregar una columna a un dataframe, utilizando un valor de una columna específica, asumamos que es un id, para buscar su valor real en otro df.

Así que configuré una def de búsqueda:

def lookup(id:String): String {
return lookupdf.select(“value”).where(s”id = ‘$id'”).as[String].first
}

La definición de búsqueda funciona si la pruebo por separado pasando una cadena de ID, devuelve el valor correspondiente.

Pero estoy teniendo dificultades para encontrar una forma de usarla dentro de la función “withColumn”.

dataDf
.withColumn(“lookupVal”, lit(lookup(col(“someId”))))

Dice apropiadamente que estoy pasando una columna, en lugar de la cadena esperada, la pregunta es ¿cómo le doy el valor real de esa columna?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para usar la función de búsqueda dentro de la función “withColumn”, puedes utilizar la función “udf” (función definida por el usuario) de Spark SQL para crear una nueva función que aplique tu función de búsqueda a cada fila de tu dataframe. Aquí tienes un ejemplo de código:

    import org.apache.spark.sql.functions.udf
    
    // Define una udf que llama a la función de búsqueda en cada fila
    val lookupUdf = udf((id: String) => lookup(id))
    
    // Usa la udf en withColumn para aplicar la función de búsqueda a la columna "someId"
    dataDf.withColumn("lookupVal", lookupUdf(col("someId")))
    

    Este código crea una nueva función llamada “lookupUdf” que toma un id de cadena y aplica tu función de búsqueda a él. Luego, dentro de la función “withColumn”, usamos “lookupUdf” en la columna “someId” para añadir una nueva columna llamada “lookupVal” que contiene los valores buscados por la función “lookup”.

Comments are closed.