У мене є кадр даних із таким кодом:
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.