मेरे पास निम्नलिखित कोड के साथ एक डेटाफ्रेम है:
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"))
अब लॉग की जांच करते हुए, मुझे पता चला कि प्रत्येक पंक्ति के लिए यूडीएफ को 3 बार निष्पादित किया जाता है। यदि मैं "test3" को "test.three" कॉलम से जोड़ता हूं तो UDF को एक बार फिर निष्पादित किया जाता है।
क्या कोई मुझे समझा सकता है क्यों?
क्या इसे ठीक से टाला जा सकता है ("परीक्षण" के बाद डेटाफ़्रेम को शामिल किए बिना, भले ही यह काम करता हो)?
Map
स्ट्रक्चर नहीं। अब एक मैप वापस करने के बजाय, यदि UDF टेस्ट (एक स्ट्रिंग, दो: स्ट्रिंग) की तरह एक केस क्लास लौटाता है, तो test
वास्तव में एक स्ट्रक्चर्स है, लेकिन हमेशा यूडीएफ के कई निष्पादन होते हैं।