apache-spark - 检查列是否包含有效数据
问题描述
我有一个日期列,当我从文件中获取数据时,日期为 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
解决方案
如果我正确理解了您的问题,以下是我的方法。您不需要构建函数,而是可以使用内置函数构建表达式并传递表达式。
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|
+--------+----------+
推荐阅读
- python - 在 Python 中解析 JSON 嵌套数组,保留到 Json 对象的映射
- android - 如何使用 mockK 为线程编写单元测试
- c - 为什么这个 LED 序列循环不循环?
- typescript - 如何在 TypeScript 中键入作为对象属性的构造函数?
- mpdf - MPDF 不显示表格边框或与表格相关的任何内容,仅显示数据
- jmeter - 无法在 JSR223 后处理器中添加字符串
- python - 在 jupyter notebook 中为 spacy 安装 pip 失败
- api - 使用 symfony 4 和 Api 平台添加注销操作,并将此操作与 React Native 一起使用以销毁 JWT 生成的令牌
- reactjs - React - 父模态中的表单提交按钮
- mysql - 如何将日期字符串与数据库中的日期时间列进行比较