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)?
Map
değ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 test
zaman gerçekten bir Struct olur, ancak her zaman UDF'nin çok sayıda yürütülmesi vardır.