J'ai une trame de données avec le code suivant:
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"))
Maintenant, en vérifiant les journaux, j'ai découvert que pour chaque ligne, l'UDF est exécuté 3 fois. Si j'ajoute le "test3" d'une colonne "test.three" alors l'UDF est exécuté une fois de plus.
Quelqu'un peut-il m'expliquer pourquoi?
Cela peut-il être évité correctement (sans mettre en cache la trame de données après l'ajout de "test", même si cela fonctionne)?
Map
et non un Struct. Maintenant, au lieu de renvoyer une carte, si l'UDF renvoie une classe de cas comme Test (une chaîne, deux: chaîne), il test
y a bien un Struct mais il y a toujours autant d'exécutions de l'UDF.