নিম্নলিখিত কোড সহ আমার একটি ডেটাফ্রেম রয়েছে:
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 বার কার্যকর করা হয়। যদি আমি একটি "টেস্ট.থ্রি" কলাম থেকে "টেস্ট3" যুক্ত করি তবে ইউডিএফ আরও একবার কার্যকর করা হবে।
কেউ আমাকে ব্যাখ্যা করতে পারেন কেন?
এটিকে কী সঠিকভাবে এড়ানো যায় ("টেস্ট" যুক্ত হওয়ার পরে ডেটাফ্রেমকে ক্যাচ না করে, এটি কাজ করলেও)?
Map
ডেটাটাইপ স্ট্রাক্ট নয়। এখন মানচিত্র ফিরিয়ে দেওয়ার পরিবর্তে, যদি ইউডিএফ টেস্টের মতো কেস ক্লাস দেয় (একটি স্ট্রিং, দুটি: স্ট্রিং) তবে test
এটি অবশ্যই স্ট্রাক্ট তবে ইউডিএফের যতটা মৃত্যুদণ্ড কার্যকর থাকে তা সর্বদা থাকে।