将各个值映射到各个日期

问题描述 投票:0回答:1

输入:

身份证 第一次约会 最后日期 价值观
1 2023-12-10 2023-12-14 2,4,6,7,8
2 2024-01-12 2023-12-21 0,0,16,2,7,0,1,1,2,3

预期产出:

身份证 第一个日期和最后一个日期 价值
1 2023-12-10 2
1 2023-12-11 4
1 2023-12-12 6
1 2023-12-13 7
1 2023-12-14 8
2 2024-01-12 0
2 2024-01-13 0
2 2024-01-14 16
2 2024-01-15 2
2 2024-01-16 7
2 2024-01-17 0
2 2024-01-18 1
2 2024-01-19 1
2 2024-01-20 2
2 2024-01-21 3

我能够按预期获取日期,但我无法在相应日期前面映射相应的值。

df.withColumn("FirstDateAndLastDate", explode(expr("sequence(to_date(FirstDate), to_date(LastDate), interval 1 day)")))

当我爆炸时,它会按行分隔数据,但不会分隔各个日期。

df.withColumn("new_value", explode(split(col("values"), ",")))

python sql pyspark apache-spark-sql
1个回答
0
投票

给定 start_date 和 end_date 的类型为 datetime。

def generate_dates(start_date, end_date, values):
    current_date = start_date
    date_values = []

    while current_date <= end_date:
        date_values.append((current_date, values[len(date_values) % len(values)]))
        current_date += relativedelta.relativedelta(days=1)

    return date_values
© www.soinside.com 2019 - 2024. All rights reserved.