首页 > 解决方案 > 检查列是否包含有效数据

问题描述

我有一个日期列,当我从文件中获取数据时,日期为 YYYYMM 格式,但在将其转换为数据框后,我必须检查数据是否有效,这意味着我必须检查它是否在YYYYMMDD 与否。否则我必须将其替换为默认日期 9999-12-31。这是一个例子这就是我的案例陈述的样子——

case when is_valid_date(date) is not null then date else 9999-12-31.

我需要创建一个简单的函数is_valid_data来检查日期值是否有效

 input table 
 ID  date
 1  12345

 o/p expected 
 ID  date
 1  9999-12-31

标签: apache-sparkapache-spark-sql

解决方案


如果我正确理解了您的问题,以下是我的方法。您不需要构建函数,而是可以使用内置函数构建表达式并传递表达式。

val df = Seq("12345", "20190312", "3", "4", "5").toDF("col1")
import org.apache.spark.sql.functions._


/*
* checks the given raw data is in expected date format or not.
* if not in the expected format, values are replaced with default value.
*
* Note: You need to change the dateformat according to your requirement
*/

val condExp = when(to_date(col("col1"), "yyyymmdd") isNull, lit("9999-12-31")).otherwise(col("col1"))
df.withColumn("col2", condExp).show()

结果

+--------+----------+
|    col1|      col2|
+--------+----------+
|   12345|9999-12-31|
|20190312|  20190312|
|       3|9999-12-31|
|       4|9999-12-31|
|       5|9999-12-31|
+--------+----------+

推荐阅读