gpt4 book ai didi

pyspark - 获取 Spark DataFrame 中两个日期之间的所有日期

转载 作者:行者123 更新时间:2023-12-02 19:07:47 24 4
gpt4 key购买 nike

我有一个 DF,其中有 bookingDtarrivalDt 列。我需要找到这两个日期之间的所有日期。

示例代码:

df = spark.sparkContext.parallelize(
[Row(vyge_id=1000, bookingDt='2018-01-01', arrivalDt='2018-01-05')]).toDF()
diffDaysDF = df.withColumn("diffDays", datediff('arrivalDt', 'bookingDt'))
diffDaysDF.show()

代码输出:

+----------+----------+-------+--------+
| arrivalDt| bookingDt|vyge_id|diffDays|
+----------+----------+-------+--------+
|2018-01-05|2018-01-01| 1000| 4|
+----------+----------+-------+--------+

我尝试的是查找两个日期之间的天数,并使用 timedelta 函数计算所有日期并分解它。

dateList = [str(bookingDt + timedelta(i)) for i in range(diffDays)]

预期输出:

基本上,我需要构建一个 DF,其中包含 bookingDtarrivalDt 之间(含这两个日期)之间的每个日期的记录。

+----------+----------+-------+----------+
| arrivalDt| bookingDt|vyge_id|txnDt |
+----------+----------+-------+----------+
|2018-01-05|2018-01-01| 1000|2018-01-01|
+----------+----------+-------+----------+
|2018-01-05|2018-01-01| 1000|2018-01-02|
+----------+----------+-------+----------+
|2018-01-05|2018-01-01| 1000|2018-01-03|
+----------+----------+-------+----------+
|2018-01-05|2018-01-01| 1000|2018-01-04|
+----------+----------+-------+----------+
|2018-01-05|2018-01-01| 1000|2018-01-05|
+----------+----------+-------+----------+

最佳答案

对于 Spark 2.4+ sequence可用于创建一个包含 bookingDtarrivalDt 之间所有日期的数组。然后可以分解该数组。

from pyspark.sql import functions as F

df = df \
.withColumn('bookingDt', F.col('bookingDt').cast('date')) \
.withColumn('arrivalDt', F.col('arrivalDt').cast('date'))

df.withColumn('txnDt', F.explode(F.expr('sequence(bookingDt, arrivalDt, interval 1 day)')))\
.show()

输出:

+-------+----------+----------+----------+
|vyge_id| bookingDt| arrivalDt| txnDt|
+-------+----------+----------+----------+
| 1000|2018-01-01|2018-01-05|2018-01-01|
| 1000|2018-01-01|2018-01-05|2018-01-02|
| 1000|2018-01-01|2018-01-05|2018-01-03|
| 1000|2018-01-01|2018-01-05|2018-01-04|
| 1000|2018-01-01|2018-01-05|2018-01-05|
+-------+----------+----------+----------+

关于pyspark - 获取 Spark DataFrame 中两个日期之间的所有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51745007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com