Aşağıdaki kod ile bir veri çerçevesi var:
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"))
Şimdi günlükleri kontrol ederek, her satır için UDF'nin 3 kez yürütüldüğünü öğrendim. Bir "test.three" sütunundan "test3" eklersem, UDF bir kez daha yürütülür.
Birisi bana nedenini açıklayabilir mi?
Bu düzgün bir şekilde önlenebilir mi (bu işe yararsa bile "test" eklendikten sonra veri çerçevesini önbelleğe almadan)?
Mapdeğil bir Struct. Şimdi bir Harita döndürmek yerine, UDF Test (bir String, two: String) gibi bir vaka sınıfı döndürürse, o testzaman gerçekten bir Struct olur, ancak her zaman UDF'nin çok sayıda yürütülmesi vardır.