gpt4 book ai didi

apache-spark - weekofyear() 返回 1 月 1 日看似不正确的结果

转载 作者:行者123 更新时间:2023-12-04 22:55:18 25 4
gpt4 key购买 nike

我不太确定为什么我的代码给出 52 作为答案:weekofyear("01/JAN/2017") .

有没有人对此有可能的解释?有一个更好的方法吗?

from pyspark.sql import SparkSession, functions
spark = SparkSession.builder.appName('weekOfYear').getOrCreate()
from pyspark.sql.functions import to_date

df = spark.createDataFrame(
[(1, "01/JAN/2017"), (2, "15/FEB/2017")], ("id", "date"))

df.show()
+---+-----------+
| id| date|
+---+-----------+
| 1|01/JAN/2017|
| 2|15/FEB/2017|
+---+-----------+

计算一年中的第几周

df=df.withColumn("weekofyear", functions.weekofyear(to_date(df["date"],"dd/MMM/yyyy")))

df.printSchema()

root
|-- id: long (nullable = true)
|-- date: string (nullable = true)
|-- weekofyear: integer (nullable = true)

df.show()

“错误”如下所示:

+---+-----------+----------+
| id| date|weekofyear|
+---+-----------+----------+
| 1|01/JAN/2017| 52|
| 2|15/FEB/2017| 7|
+---+-----------+----------+

最佳答案

好像weekofyear()如果一周中的某一天是周一到周四,则只会返回 1 月 1 日。

为了确认,我创建了一个包含所有 "01/JAN/YYYY" 的 DataFrame从 1900 年到 2018 年:

df = sqlCtx.createDataFrame(
[(1, "01/JAN/{y}".format(y=year),) for year in range(1900,2019)],
["id", "date"]
)

现在让我们将其转换为日期,获取星期几,然后计算 weekofyear() 的值。 :

import pyspark.sql.functions as f
df.withColumn("d", f.to_date(f.from_unixtime(f.unix_timestamp('date', "dd/MMM/yyyy"))))\
.withColumn("weekofyear", f.weekofyear("d"))\
.withColumn("dayofweek", f.date_format("d", "E"))\
.groupBy("dayofweek", "weekofyear")\
.count()\
.show()
#+---------+----------+-----+
#|dayofweek|weekofyear|count|
#+---------+----------+-----+
#| Sun| 52| 17|
#| Mon| 1| 18|
#| Tue| 1| 17|
#| Wed| 1| 17|
#| Thu| 1| 17|
#| Fri| 53| 17|
#| Sat| 53| 4|
#| Sat| 52| 12|
#+---------+----------+-----+

注意,我使用的是 Spark v 2.1,其中 to_date() 不接受格式参数,所以我不得不使用 this answer 中描述的方法将字符串转换为日期。

同样 to_date()只返回 1:
  • 1 月 2 日,如果一周中的某一天是周一至周五。
  • 1 月 3 日,如果一周中的某一天是周一至周六。


  • 更新

    此行为与 ISO 8601 一致定义。

    关于apache-spark - weekofyear() 返回 1 月 1 日看似不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49904570/

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