我有一个scala函数,计算两个LocalDateTime
作为参数的两个日期之间的差异:
我有一个包含两个字段start_date和finish_date的dataFrame。
我希望construst UDF“可能”在我的数据帧上应用函数toEquals,特别是在é字段start_date
和finish_date
上计算它们之间的差异。但start_date和finish_date的类型是String。
答案 0 :(得分:1)
我还没有测试过代码,但在toEquals
函数中使用udf
逻辑应该足够了
import org.apache.spark.sql.functions.udf
def toEquals = udf((rd1: String, rd2: String) => {
val d1 = adjust(LocalDateTime.parse(rd1, DATE_TIME_FORMATTER))
val d2 = adjust(LocalDateTime.parse(rd2, DATE_TIME_FORMATTER), asc = false)
if (d1.isAfter(d2)) 0.hours.toString
else if (d1.toLocalDate.isEqual(d2.toLocalDate)) {
(toEnd(d1.toLocalTime) - toEnd(d2.toLocalTime)).toString
}
else {
(toEnd(d1.toLocalTime) + jourOuvree(d1.toLocalDate.plusDays(1), d2.toLocalDate.minusDays(1)) * 8.hours + toStart(d2.toLocalTime)).toString
}
})
您可以将udf
功能称为
input_table.withColumn("toEquals", toEquals($"start_date",$"finish_date"))