我有Scala代码,我正在使用udf函数来计算计算及其状态为true或false格式,而执行时我收到的错误是“无法转换为scala.Function5”。
任何帮助将不胜感激。
val kdRule = { (st: String, amtIs: Double, sQ: Int, lA: Double, vPP: Double,lD:Double) =>
if (st != "KL" && st != "AD" && amtIs == 0)
if (sQ >= 0)
if (Math.abs(Math.round(lA / sQ) - Math.round(((vPP * sQ) - lD) / sQ).toDouble ) < 0.02)
true
else if (Math.abs(Math.round(lA).toDouble - Math.round((vPP * sQ) - lD).toDouble ) < 0.02)
true
else
false
else
false
else
false
}
val kdRuleUdf = udf(kdRule)
kdDF.withColumn("RowKD", kdRuleUdf(kdDF("stypes"), kdDF("amadv"), kdDF("sdQ"),kdDF("lineM"), kdDF("vPP"),kdDF("lD"))).drop("RowKD")
答案 0 :(得分:1)
您的udf接受6个参数。
(st: String, amtIs: Double, sQ: Int, lA: Double, vPP: Double, lD: Double)
你只通过了5。
(kdDF("stypes"), kdDF("amadv"), kdDF("sdQ"),kdDF("lineM"), kdDF("vPP"))
答案 1 :(得分:1)
检查您的UDF,您需要6个参数,并且您只传递了5个参数。
要求:val kdRule = (st: String, amtIs: Double, sQ: Int, lA: Double, vPP: Double, lD: Double)
通过kdRuleUdf(df("stypes"), df("amadv"), df("sdQ"),df("lineM"), df("vPP"))).drop("RowKD")