我正在使用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以获得正确的输出。
暂无答案!
目前还没有任何答案,快来回答吧!