Как добавить добавочное значение даты по отношению к значению первой строки в искровом кадре данных

avatar
Zdev
1 июля 2021 в 17:14
127
1
0

Ввод:

+------+--------+  
|Test  |01-12-20|  
|Ravi  |    null|  
|Son   |    null|

Ожидаемый результат:

+------+--------+  
|Test  |01-12-20|  
|Ravi  |02-12-20|  
|Son   |03-12-20|

Я пробовал с .withColumn(col("dated"),date_add(col("dated"),1)); Но это приводит к NULL для всех значений столбцов.

Не могли бы вы помочь мне получить добавочные значения во втором столбце даты?

Источник
ggordon
1 июля 2021 в 23:05
0

есть ли столбец идентификатора в вашем наборе данных? В вашем наборе данных есть только одна строка с датой или есть другие, например. в строке 1 есть дата, тогда в строке 45 есть дата. Если есть другие, как к этому относиться?

dsk
2 июля 2021 в 08:42
0

@zdev не могли бы вы принять мой ответ? Это действительно помогает

Ответы (1)

avatar
dsk
2 июля 2021 в 08:05
3

Это будет для вас рабочим решением

Ввод

df = spark.createDataFrame([("Test", "01-12-20"),("Ravi", None),("Son", None)],[ "col1","col2"])
df.show()
df = df.withColumn("col2", F.to_date(F.col("col2"),"dd-MM-yy"))
# a dummy col for window function
df = df.withColumn("del_col", F.lit(0))
_w = W.partitionBy(F.col("del_col")).orderBy(F.col("del_col").desc())
df = df.withColumn("rn_no", F.row_number().over(_w)-1)
# Create a column with the same date
df = df.withColumn("dated", F.first("col2").over(_w))

df = df.selectExpr('*', 'date_add(dated, rn_no) as next_date')
df.show()

DF

+----+--------+
|col1|    col2|
+----+--------+
|Test|01-12-20|
|Ravi|    null|
| Son|    null|
+----+--------+

Окончательный результат

+----+----------+-------+-----+----------+----------+
|col1|      col2|del_col|rn_no|     dated| next_date|
+----+----------+-------+-----+----------+----------+
|Test|2020-12-01|      0|    0|2020-12-01|2020-12-01|
|Ravi|      null|      0|    1|2020-12-01|2020-12-02|
| Son|      null|      0|    2|2020-12-01|2020-12-03|
+----+----------+-------+-----+----------+----------+