scala - 如何在我们有 null 的日期字段中放置一些默认值,例如“9999-12-31”
问题描述
test是一个数据框,其中t_dob是一个日期字段,其中包含空值。每当我使用 spark scala 提交的日期为空时,我想硬编码一个像“9999-12-31”这样的值。在日期字段的 na.fill() 方法中找不到任何此类选项。谁能让我知道如何做到这一点。
预期输出如下:-
+-------------+--------+-----+ |s_customer_id| s_name|t_dob| +-------------+--------+-----+ | 101|羞耻| 9999-12-31| | 102| 拉杰什| 9999-12-31| +-------------+--------+------+
解决方案
这是我的方法
val spark = getSession()
val data = Seq(("101", "Shameer", null),
("102", "Rajesh", new Date(new java.util.Date().getTime)))
import spark.implicits._
val df = spark.sparkContext.parallelize(data).toDF("s_customer_id", "s_name", "t_dob")
import org.apache.spark.sql.functions.{lit, when, to_date}
df.withColumn("t_dob", when($"t_dob".isNull, to_date(lit("9999-12-31"), "yyyy-MM-dd")).otherwise($"t_dob")).show()
输出
+-------------+-------+----------+
|s_customer_id| s_name| t_dob|
+-------------+-------+----------+
| 101|Shameer|9999-12-31|
| 102| Rajesh|2019-02-21|
+-------------+-------+----------+
推荐阅读
- ansible - Ansible - 将多个 AD 用户添加到 AD 组
- python - 使用 SELECT 和 INSERT 等参数查询 SQLite3 数据库
- twilio - Twilio 中 RemoteAudioTrack 的“静音”条件检测
- vb.net - 使用 Visual Basic 执行本地 HTML 文件
- c++ - 重新排列k个子阵列后的最长递增子序列
- react-native - 如何测试由 ComponentDidMount 中的操作创建者触发的商店更新
- email - Outlook 2016 - 所有电子邮件到达标记为已读
- xamarin - XAMARIN - Microsoft.NETCore.UniversalWindowsPlatform v6.2.9 失败
- java - 尝试将对象添加到列表并将其保存在 Spring Boot 上的 MySQL 中时出现 UnsupportedOperationException
- r - 是否可以添加一个图例框,其中包含用 geom_text 编写的文本?