从 pyspark 或 python 中的合并数字导出出生日期/出生日期?

Derive dob / date of birth from merged numbers in pyspark or python?

我正在尝试从 pyspark 中的一个列中以日期数据类型格式 (YYYY-MM-DD) 导出 DOB,该列的信息被反转,作为一个大整数,并且具有单个数字 day/month's删除前导零。最后一点意味着数据的长度在 6-8 位数字之间变化。对于 7 位数字,有两种情况由于歧义而无法推导,我很乐意为这些情况输出空值。

示例:

模棱两可的例子:

代码逻辑比较复杂,有点高我。我想我可以在派生 DOB 之前派生出新的年、月和日列。首先导出日期和年份 cols,同时从合并的数字 col 中删除这些数字以离开月份。

年份 = 最后 4 位数字。

天:

之前:

merged digits  | Day | Year
1232000        |     | 

之后:

merged digits  | Day | Year
3              | 12  | 2000

只是一个想法。感谢您的帮助和想法!

按照你的逻辑:

from pyspark.sql import functions as F


F.when(
    F.size("merged_digits") == 6,
    F.Array(
        F.lpad(F.substring("merged_digits", 1, 1), 2, "0"),
        F.lpad(F.substring("merged_digits", 2, 1), 2, "0"),
        F.substring("merged_digits", 3, 4),
    ),
).when(
    F.size("merged_digits") == 8,
    F.Array(
        F.substring("merged_digits", 1, 2),
        F.substring("merged_digits", 3, 2),
        F.substring("merged_digits", 5, 4),
    ),
).when(
    F.substring("merged_digits", 1, 1) == "0",
    F.Array(
        F.substring("merged_digits", 1, 2),
        F.lpad(F.substring("merged_digits", 3, 1), 2, "0"),
        F.substring("merged_digits", 4, 4),
    ),
).when(
    F.substring("merged_digits", 2, 1).cast("int") >= 2,
    F.Array(
        F.substring("merged_digits", 1, 2),
        F.lpad(F.substring("merged_digits", 3, 1), 2, "0"),
        F.substring("merged_digits", 4, 4),
    ),
).when(
    (F.substring("merged_digits", 2, 1) == "1")
    & (F.substring("merged_digits", 3, 1) == "0"),
    F.Array(
        F.lpad(F.substring("merged_digits", 1, 1), 2, "0"),
        F.substring("merged_digits", 2, 2),
        F.substring("merged_digits", 4, 4),
    ),
)

我创建的输出是一个数组,第一个元素是日,第二个元素是月,最后一个元素是年,所有元素都用 0 左填充以具有相同的格式。