Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在spark数据框中发现列格式的异常?_Regex_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Regex 如何在spark数据框中发现列格式的异常?

Regex 如何在spark数据框中发现列格式的异常?,regex,scala,apache-spark,apache-spark-sql,Regex,Scala,Apache Spark,Apache Spark Sql,正如问题所说,我希望在大型数据集中的列中找到值格式的异常。 例如:如果我在一个数据集中有一个日期列,比如说5亿行,我想确保该列中所有行的日期格式都是MM-DD-YYYY。我想找到计数和值,在这种格式中有异常。 我该怎么做?我能用正则表达式吗?有人能举个例子吗?要使用Spark Dataframe执行此操作。使用正则表达式进行正确的日期格式验证可能会比较棘手(请参阅:),但您可以使用以下方法: import scala.util.{Try, Failure} import org.apache

正如问题所说,我希望在大型数据集中的列中找到值格式的异常。

例如:如果我在一个数据集中有一个日期列,比如说5亿行,我想确保该列中所有行的日期格式都是MM-DD-YYYY。我想找到计数和值,在这种格式中有异常。


我该怎么做?我能用正则表达式吗?有人能举个例子吗?要使用Spark Dataframe执行此操作。

使用正则表达式进行正确的日期格式验证可能会比较棘手(请参阅:),但您可以使用以下方法:

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()