繁体   English   中英

Spark UDF比较日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM