У мене є кадр даних із таким кодом:
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"))
Тепер перевіривши журнали, я з’ясував, що для кожного рядка UDF виконується 3 рази. Якщо я додаю "test3" із стовпця "test.three", то UDF виконується ще раз.
Хтось може мені пояснити, чому?
Чи можна цього уникнути належним чином (без кешування кадрів даних після додавання "тесту", навіть якщо це працює)?
Mapа не Struct. Тепер замість повернення Map, якщо UDF повертає клас регістрів, як Test (одна строка, два: String), то testце справді структура, але завжди існує стільки виконання UDF.