繁体   English   中英

验证输入火花数据帧中的time_stamp以生成正确的输出火花数据帧

[英]Validate time_stamp in input spark dataframe to generate correct output spark dataframe

我有一个包含多个列的Spark数据框。 其中之一是“ t_s”列。 我想在以下条件下生成一个新的数据框: 如果“ t_s”列的值为空,或者格式不正确,则生成current_timestamp。 b。 如果“ 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”的值。

这个怎么做?

怎么样:

val fmt = "yyyy-MM-dd HH:mm:ss"

val df = Seq(
  "2019-10-21 14:45:23",
  "2019-10-22 14:45:23",
  null,
  "2019-10-41 14:45:23", //invalid day
).toDF("ts")


df.withColumn("ts", to_timestamp($"ts", fmt))
  .withColumn("ts", when($"ts".isNull, date_format(current_timestamp(), fmt)).otherwise($"ts"))
  .show(false)

+-------------------+
|ts                 |
+-------------------+
|2019-10-21 14:45:23|
|2019-10-22 14:45:23|
|2019-08-20 13:54:23|
|2019-08-20 13:54:23|
+-------------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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