【发布时间】:2021-07-05 22:42:31
【问题描述】:
我正在尝试比较 2 个时间戳列并返回两者中最小值的值,并且想知道是否有比我拥有的更好的方法。请注意,两列可能都有值/其中一列有值,另一列可能为空。我知道When.otherwise。
import org.apache.spark.sql.functions._
import java.sql.Timestamp
val compareTime = udf((t1: Timestamp, t2: Timestamp) => {
if(t1 != null && t2 != null && t1.before(t2) ){
Some(t1)
}
else if(t1 != null && t2 != null && t2.before(t1)){
Some(t2)
}
else if(t1 != null){
Some(t1)
}
else if(t2 != null){
Some(t2)
}
else {
None
}
})
var df = Seq((1L, "2021-01-04 16:10:00","2021-01-04 15:20:00")).toDF("id","t1","t2")
df = (df.withColumn("t1",to_timestamp($"t1","yyyy-MM-dd HH:mm:ss"))
.withColumn("t2",to_timestamp($"t2","yyyy-MM-dd HH:mm:ss")))
df = df.withColumn("t3",compareTime($"t1",$"t2"))
df.show()
【问题讨论】:
标签: scala apache-spark apache-spark-sql user-defined-functions