Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark 检查该列是否有有效的数据_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 检查该列是否有有效的数据

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 如果

当我从文件中获取数据时,我有一个日期列,它的日期格式为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

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

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|
+--------+----------+