Tengo un marco de datos con el siguiente código:
def test(lat: Double, lon: Double) = {
println(s"testing ${lat / lon}")
Map("one" -> "one", "two" -> "two")
}
val testUDF = udf(test _)
df.withColumn("test", testUDF(col("lat"), col("lon")))
.withColumn("test1", col("test.one"))
.withColumn("test2", col("test.two"))
Ahora comprobando los registros, descubrí que para cada fila el UDF se ejecuta 3 veces. Si agrego el "test3" de una columna "test.three", el UDF se ejecuta una vez más.
¿Alguien puede explicarme por qué?
¿Se puede evitar esto correctamente (sin almacenar en caché el marco de datos después de agregar "prueba", incluso si esto funciona)?
Map
y no un Struct. Ahora, en lugar de devolver un Mapa, si la UDF devuelve una clase de caso como Test (una Cadena, dos: Cadena), entonces test
es una Estructura pero siempre hay tantas ejecuciones de la UDF.