gpt4 book ai didi

apache-spark - 在 Spark 中将日期转换为 ISO 周日期

转载 作者:行者123 更新时间:2023-12-01 23:07:44 31 4
gpt4 key购买 nike

在一列中有日期,如何创建包含 ISO week date 的列?

ISO 周日期由周数星期组成。

  • year 与使用 year 获得的年份不同功能。
  • 周数 是比较简单的部分 - 它可以使用 weekofyear 获得.
  • weekday 应该为星期一返回 1,为星期日返回 7,而 Spark 的 dayofweek做不到。

示例数据框:

from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([
('1977-12-31',),
('1978-01-01',),
('1978-01-02',),
('1978-12-31',),
('1979-01-01',),
('1979-12-30',),
('1979-12-31',),
('1980-01-01',)],
['my_date']
).select(F.col('my_date').cast('date'))

df.show()
#+----------+
#| my_date|
#+----------+
#|1977-12-31|
#|1978-01-01|
#|1978-01-02|
#|1978-12-31|
#|1979-01-01|
#|1979-12-30|
#|1979-12-31|
#|1980-01-01|
#+----------+

期望的结果:

+----------+-------------+
| my_date|iso_week_date|
+----------+-------------+
|1977-12-31| 1977-W52-6|
|1978-01-01| 1977-W52-7|
|1978-01-02| 1978-W01-1|
|1978-12-31| 1978-W52-7|
|1979-01-01| 1979-W01-1|
|1979-12-30| 1979-W52-7|
|1979-12-31| 1980-W01-1|
|1980-01-01| 1980-W01-2|
+----------+-------------+

最佳答案

Spark SQL extract使这变得容易得多。

  • iso_year = F.expr("EXTRACT(YEAROFWEEK FROM my_date)")
  • iso_weekday = F.expr("EXTRACT(DAYOFWEEK_ISO FROM my_date)")

因此,使用 concat_ws 构建其他答案:

import pyspark.sql.functions as F

df.withColumn(
'iso_week_date',
F.concat_ws(
"-",
F.expr("EXTRACT(YEAROFWEEK FROM my_date)"),
F.lpad(F.weekofyear('my_date'), 3, "W0"),
F.expr("EXTRACT(DAYOFWEEK_ISO FROM my_date)")
)
).show()

#+----------+-------------+
#| my_date|iso_week_date|
#+----------+-------------+
#|1977-12-31| 1977-W52-6|
#|1978-01-01| 1977-W52-7|
#|1978-01-02| 1978-W01-1|
#|1978-12-31| 1978-W52-7|
#|1979-01-01| 1979-W01-1|
#|1979-12-30| 1979-W52-7|
#|1979-12-31| 1980-W01-1|
#|1980-01-01| 1980-W01-2|
#+----------+-------------+

关于apache-spark - 在 Spark 中将日期转换为 ISO 周日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70509006/

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