spark udf未返回正确的输出

lzfw57am  于 2021-07-12  发布在  Spark
关注(0)|答案(0)|浏览(177)

我正在使用databricks+spark3

object obj1 extends Serializable {
    def getAmount (p1: Long, p2: Double, p3: Double): Double = {
        val udmDataDf = sqlContext.sql(s"""select * from table where col = p1""")
        val amount = 100

        return amount
      }
}

如果运行以下命令,则得到的值为100:

obj1.getAmount(123456, 100, 100)
output: 100

我正在创建一个自定义项并使用try/option来处理空输出:

import scala.util.Try
val amtUdf = udf((p1: Long, p2: Double, p3: Double) => Try(obj1.getAmount(p1, p2, p3)).toOption)

我在dataframe中添加了一列,用于计算函数中的值。
以下命令成功运行:

val df = df1.withColumn("Amt", amtUdf($"p1", $"p2", $"p3"))

但当我尝试使用下面的检查数据时,amt列将为空:

df.show

如果我从函数getamount中删除以下行,那么上面的命令将给出输出100:

val udmDataDf = sqlContext.sql(s"""select * from table where col = p1""")

如何修复udf以获得正确的输出。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题