scala - 如何在 spark scala 的数据框列中验证日期格式

标签 scala datetime apache-spark apache-spark-sql

我有一个包含一个 DateTime 列和许多其他列的数据框。

我想做的就是解析这个 DateTime 列值并检查格式是否为 "yyyy-MM-dd HH:mm:ss"。如果是这样,那么我希望将这些有效记录放在一个数据框中。

如果 DateTime 列包含格式 "yyyy-MM-dd HH:mm:ss" 以外的任何值。我想要其他数据框中的那些无效记录。

谢谢。

最佳答案

您可以使用filter() 获取dataframe 中的valid/invalid 记录。从 Scala 的角度来看,可以改进此代码。

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

  def validateDf(row: Row): Boolean = try {
    //assume row.getString(1) with give Datetime string
    java.time.LocalDateTime.parse(row.getString(1), java.time.format.DateTimeFormatter.ofPattern(DATE_TIME_FORMAT))
    true
  } catch {
    case ex: java.time.format.DateTimeParseException => {
      // Handle exception if you want
      false
    }
  }



val session = SparkSession.builder
  .appName("Validate Dataframe")
  .getOrCreate

val df = session. .... //Read from any datasource

import session.implicits._ //implicits provide except() on df  

val validDf = df.filter(validateDf(_))
val inValidDf = df.except(validDf)

关于scala - 如何在 spark scala 的数据框列中验证日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509230/

相关文章:

Scala 使用带有 + 的 Case 语句

PHP MYSQL 将时区感知日期转换为 UTC

datetime - Flutter - 将分钟转换为 H :M

java - Apache Spark : Classloader cannot find classDef in the jar

scala - 我如何提供编译时保证我的方法将返回它在 Scala 中获得的相同对象?

Scala 的 .map() 函数在不可变和可变映射上

java - Spark Structured Streaming - 有状态流处理中使用窗口操作进行事件处理

scala - 如何分解带有前缀的结构列?

mysql - 使用 Slick/Scala 将日期和时间存储到 MySQL 中

python - 获取服务器时间并在 python 中使用它