извлекать день из первой недели года - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь извлечь в pyspark дату воскресенья для каждой недели в году. Неделя и год указываются в формате ггггww. Это возможно для каждой недели, кроме первой недели, в этом случае значение имеет нулевое значение. Это пример кода и результат.

columns = ['id', 'week_year']
vals = [
     (1, 201952),
     (2, 202001),
     (3, 202002),
     (4, 201901),
     (5, 201902)
]
df = spark.createDataFrame(vals, columns)
+---+---------+
| id|week_year|
+---+---------+
|  1|   201952|
|  2|   202001|
|  3|   202002|
|  4|   201901|
|  5|   201902|
+---+---------+
df = df.withColumn("day", to_timestamp(concat(df.week_year, lit("-Sunday")), 'yyyyww-E'))

В результате я получил

+---+---------+-------------------+
| id|week_year|                day|
+---+---------+-------------------+
|  1|   201952|2019-12-22 00:00:00|
|  2|   202001|               null|
|  3|   202002|2020-01-05 00:00:00|
|  4|   201901|               null|
|  5|   201902|2019-01-06 00:00:00|
+---+---------+-------------------+

У вас есть идея, почему она не работает в течение первой недели? Мне также странно, что 5.01 и 6.01 на второй неделе, а не на первой.

1 Ответ

0 голосов
/ 29 апреля 2020

Если вы посмотрите на календарь на 2020 год, год начинается в среду, которая находится в середине 1-й недели, и у этой первой недели нет воскресенья. То же самое касается 2019 года. Вот почему 2020-01-05 наступает на второй неделе. enter image description here

Надеюсь, это поможет!

...