【发布时间】:2019-08-19 10:11:26
【问题描述】:
我有一个包含多列的 spark 数据框。其中之一是“t_s”列。 我想生成一个具有以下条件的新数据框: 一种。如果“t_s”列的值为空,或者格式不正确,则生成 current_timestamp。 湾。如果“t_s”列的值不为空且格式正确,则使用相同的值。
我已经编写了以下代码,但我也想插入代码以检查“t_s”是否正确?
def generateTimeStamp(df: DataFrame) = {
import spark.implicits._
var updatedDF = df
updatedDF = df.withColumn("t_s", when(($"t_s").isNull, current_timestamp()).otherwise($"t_s"))
updatedDF
}
val fmt = "yyyy-MM-dd HH:mm:ss"
val df = java.time.format.DateTimeFormatter.ofPattern(fmt)
def isCompatible(s: String) = try {
java.time.LocalDateTime.parse(s, df)
true
} catch {
case e: java.time.format.DateTimeParseException => false
}
我还想通过 isCompatible() 函数调用检查“t_s”列的值的条件。
如何做到这一点?
【问题讨论】:
-
为什么可以使用 sparksql 并将
t_s列转换为所需的日期时间格式,这应该可以达到目的。 -
我想如果转换失败,它会返回空值,我不希望将其作为结果数据帧的一部分。要么我想要正确的现有值,否则新生成的 current_timestamp()。
标签: scala apache-spark apache-spark-sql timestamp user-defined-functions