【发布时间】:2021-08-02 11:16:20
【问题描述】:
我正在尝试从 pyspark 中的日期数据类型格式 (YYYY-MM-DD) 派生 DOB,该列将信息反转为一个大整数,并删除了一位数日/月的前导零。最后一点意味着数据的长度在 6-8 位之间变化。 7 位数字在两种情况下由于歧义而无法推导,我很乐意为这些情况输出空值。
例子:
- 831945 = 1945 年 3 月 8 日
- 1232000 = 2000 年 3 月 12 日
- 11102000 = 2000 年 10 月 11 日
模棱两可的例子:
- 111YYYY = 11 月 1 日或 1 月 11 日
- 112YYYY = 12 月 1 日或 2 月 11 日
代码的逻辑非常复杂,比我高一点。我想我可以在导出 DOB 之前导出新的年、月和日列。首先导出日期和年份 cols,同时从合并的数字 col 中删除这些数字以离开月份。
年份 = 最后 4 位数字。
日期:
- 如果 len 6 则天 = 第一个数字
- 如果 len 7 和第二个数字 = 0 或 >=2 那么天 = 前两个数字
- 如果 len 7 和第 2 位 = 1 和第 3 位 ==0 则天 = 第一个数字
- 如果 len 7 和第 2 位 = 1 和第 3 位 ==1,2 则输出 null
- 如果 len 7 和第二个数字 = 1 和第三个数字 >=3 那么天 = 前两个 数字
- 如果 len 7 和第二个数字 =>2 那么天 = 前两个数字
- 如果 len 8 则天 = 前两位数
之前:
merged digits | Day | Year
1232000 | |
之后:
merged digits | Day | Year
3 | 12 | 2000
只是一个想法。感谢您的帮助和想法!
【问题讨论】:
标签: python date pyspark string-to-datetime