【问题标题】:While using udf function getting error "Validation$$anonfun$14 cannot be cast to scala.Function5" in scala在使用 udf 函数时,在 scala 中出现错误“Validation$$anonfun$14 cannot be cast to scala.Function5”
【发布时间】:2017-11-15 04:12:16
【问题描述】:

我有 Scala 代码,我在其中使用 udf 函数来计算计算及其在执行时以真或假格式的状态,我收到类似“无法转换为 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")

【问题讨论】:

  • 现在的错误是什么?我没有看到代码有任何错误。
  • Validation$$anonfun$14 不能转换为 scala.Function5
  • 这应该可以我在本地尝试过并且工作正常。
  • @ShankarKoirala 感谢您的意见。

标签: scala apache-spark


【解决方案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"))

【讨论】:

    【解决方案2】:

    检查您的 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")

    【讨论】:

      猜你喜欢
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多