我在databricks笔记本中有以下工作解决方案作为测试。
var maxcol = udf((col1: Long, col2: Long, col3: Long) => {
var res = ""
if (col1 > col2 && col1 > col3) res = "col1"
else if (col2 > col1 && col2 > col3) res = "col2"
else res = "col3"
res
})
val someDF = Seq(
(8, 10, 12, "bat"),
(64, 61, 59, "mouse"),
(-27, -30, -15, "horse")
).toDF("number1", "number2", "number3", "word")
.withColumn("maxColVal", greatest("number1", "number2", "number3"))
.withColumn("maxColVal_Name", maxcol(col("number1"), col("number2"), col("number3")))
display(someDF)
有没有办法让这个通用?我有一个用例可以让变量列传递给这个udf,并且仍然得到max列名作为输出,对应于具有max值的列。与上面不同的是,我硬编码了udf中的列名“col1”、“col2”和“col3”。
1条答案
按热度按时间ezykj2lf1#
使用方法如下: