正如问题所说,我想找到大型数据集中列中值格式的异常。
例如:如果我在包含 5 亿行的数据集中有一个日期列,我想确保该列中所有行的日期格式为 MM-DD-YYYY。我想找到此格式中存在异常的计数和值。
我该怎么做呢?我可以使用正则表达式吗?有人可以举个例子吗?想要使用 Spark Dataframe 来做到这一点。
使用正则表达式进行正确的日期格式验证可能很棘手(请参阅:正则表达式验证日期格式 dd/mm/yyyy https://stackoverflow.com/q/15491894/1560062),但你可以使用乔达时间 http://www.joda.org/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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)