使用udf函数获取错误“验证$$ anonfun $ 14无法转换为scala.Function5”中的scala

时间:2017-06-13 11:42:29

标签: scala apache-spark

我有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")

2 个答案:

答案 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")