Apache spark 检查该列是否有有效的数据
当我从文件中获取数据时,我有一个日期列,它的日期格式为YYYYMM,但在我将其转换为数据帧后,我必须检查数据是否有效,这意味着我必须检查它是否为YYMMDD格式。否则,我必须将其替换为默认日期9999-12-31。下面是一个例子,这就是我的案例陈述的样子-- 我需要创建一个名为Apache spark 检查该列是否有有效的数据,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,当我从文件中获取数据时,我有一个日期列,它的日期格式为YYYYMM,但在我将其转换为数据帧后,我必须检查数据是否有效,这意味着我必须检查它是否为YYMMDD格式。否则,我必须将其替换为默认日期9999-12-31。下面是一个例子,这就是我的案例陈述的样子-- 我需要创建一个名为is\u valid\u data的简单函数来检查日期值是否有效 input table ID date 1 12345 o/p expected ID date 1 9999-12-31 如果
is\u valid\u data
的简单函数来检查日期值是否有效
input table
ID date
1 12345
o/p expected
ID date
1 9999-12-31
如果我正确理解了您的问题,下面是我的方法。您不需要构建函数,而是可以使用内置函数构建表达式并传递表达式
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|
+--------+----------+
你的问题有点让人困惑。您的输入数据是YYYYMM还是YYYYMMDD?输入数据是YYYYMMin tat格式,您可以在我的解决方案中更改日期格式。。让我知道解决方案是否有效
+--------+----------+
| col1| col2|
+--------+----------+
| 12345|9999-12-31|
|20190312| 20190312|
| 3|9999-12-31|
| 4|9999-12-31|
| 5|9999-12-31|
+--------+----------+