Ich habe einen Datenrahmen mit folgendem Code:
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"))
Als ich nun die Protokolle überprüfte, stellte ich fest, dass die UDF für jede Zeile dreimal ausgeführt wird. Wenn ich "test3" aus einer "test.three" -Spalte hinzufüge, wird die UDF erneut ausgeführt.
Kann mir jemand erklären warum?
Kann dies richtig vermieden werden (ohne den Datenrahmen zwischenzuspeichern, nachdem "test" hinzugefügt wurde, auch wenn dies funktioniert)?
Map
und keine Struktur. Anstatt eine Map zurückzugeben, ist die UDF test
zwar eine Fallklasse wie Test ( eine Zeichenfolge , zwei: Zeichenfolge ), dann aber eine Struktur, aber es gibt immer so viele Ausführungen der UDF.