Spark UDF для сравнения дат - PullRequest
0 голосов
/ 12 июня 2018

Как я могу сделать сравнение дат в искровой UDF, используя java.sql.Date.

что-то вроде ниже ..

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")))

1 Ответ

0 голосов
/ 12 июня 2018

Как предлагают другие, по возможности используйте встроенные функции 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...