如何在Spark DataFrame中找到列格式异常?

3
正如问题所述,我想在大型数据集中查找列值格式的异常。

例如:如果我有一个包含500万行数据的日期列,我希望确保该列中所有行的日期格式为MM-DD-YYYY。 我想查找格式异常的计数和值。

我该怎么做? 我可以使用正则表达式吗? 有人能给出一个例子吗? 我想使用Spark Dataframe完成这个任务。
1个回答

3

使用正则表达式进行日期格式验证可能会有些棘手(参见:使用Regex验证日期格式dd/mm/yyyy),但您可以按照以下方式使用Joda-Time

import scala.util.{Try, Failure}
import org.apache.spark.sql.functions.udf

object FormatChecker extends java.io.Serializable {
  val fmt = org.joda.time.format.DateTimeFormat forPattern "MM-dd-yyyy"
  def invalidFormat(s: String) = Try(fmt parseDateTime s) match {
    case Failure(_) => true
    case _ => false
  }
}

val df = sc.parallelize(Seq(
    "01-02-2015", "99-03-2010", "---", "2015-01-01", "03-30-2001")
).toDF("date")

invalidFormat = udf((s: String) => FormatChecker.invalidFormat(s))
df.where(invalidFormat($"date")).count()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接