[英]Spark UDF to compare dates
如何使用java.sql.Date
在Spark UDF中进行日期比较。
像下面的东西..
def optimisedTDate =
udf(
(bdate: Date, tdate: Date, pdate: Date, fcdate: Date) =>
if (tdate == null && pdate == null) fcdate
else if (tdate > bdate) tdate
else bdate
)
val processed_df = base_df.withColumn(
"final_date",
optimisedTDate(lit {
Date.valueOf("2010-01-01")
},
col("tdate"),
col("pdate"),
col("fcdate")))
正如其他人所建议的那样,请尽可能使用Spark的内置函数以获得更好的性能。 如果必须使用udf
,则可以使用implicit conversion
来启用日期/时间比较:
import scala.language.implicitConversions
import org.joda.time.DateTime
import java.sql.Date
val d1 = Date.valueOf("2018-06-11")
val d2 = Date.valueOf("2018-06-12")
implicit def dateToDT(d: Date) = new DateTime(d)
d1.isAfter(d2)
// res1: Boolean = false
d1.isBefore(d2)
// res2: Boolean = true
如果您更喜欢使用不相等运算符,请改用以下内容:
implicit def dateToDT(d: Date) = (new DateTime(d)).getMillis
d1 > d2
// res3: Boolean = false
d1 < d2
// res4: Boolean = true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.