gpt4 book ai didi

python - pyspark date_format 函数返回错误的年份

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

pyspark.sql.functions.date_format - 返回一年中最后一天的错误年份

Pyspark版本:版本2.3.0.cloudera3Python版本:Python 2.7.5

当我尝试使用 pyspark 中的函数 date_format 重新格式化一年中的最后一个日期时,当与“YYYY”而不是“yyyy”一起使用时,它会返回下一年。

>>> from pyspark.sql.functions import *

>>> dftest = spark.createDataFrame([('2017-12-31',)], ['dt'])

>>> dftest.select(date_format('dt', 'MM/dd/yyy').alias('date')).collect()
[Row(date=u'12/31/2017')]
>>> dftest.select(date_format('dt', 'MM/dd/yyyy').alias('date')).collect()
[Row(date=u'12/31/2017')]

>>> dftest.select(date_format('dt', 'MM/dd/YYY').alias('date')).collect()
[Row(date=u'12/31/2018')]
>>> dftest.select(date_format('dt', 'MM/dd/YYYY').alias('date')).collect()
[Row(date=u'12/31/2018')]

“YYYY”(大写)与“yyyy”(小写)有何不同?

最佳答案

根据 date_format 的文档:

“可以使用 Java 类 java.text.SimpleDateFormat 的所有模式字母”

如果您查看有关 java 的文档,例如java.text.SimpleDateFormat ,您可以看到大写 Y 指的是星期年,而不是小写 y 本身。

比您的示例中的年份更长:

dftest = spark.createDataFrame([('20{}-12-31'.format(i),) for i in range(19, 25)], ['dt'])
dftest.select('dt', date_format('dt', 'MM/dd/yyyy').alias('date'),
date_format('dt', 'MM/dd/YYYY').alias('DATE'),).show()
+----------+----------+----------+
| dt| date| DATE|
+----------+----------+----------+
|2019-12-31|12/31/2019|12/31/2020|
|2020-12-31|12/31/2020|12/31/2021|
|2021-12-31|12/31/2021|12/31/2022|
|2022-12-31|12/31/2022|12/31/2022| # this one is good for both
|2023-12-31|12/31/2023|12/31/2024|
|2024-12-31|12/31/2024|12/31/2025|
+----------+----------+----------+

您可以看到 2022 年很好,这一年在星期六结束。如果你尝试更多的年份,当它们在星期六结束时你会发现相同的结果。所以我的猜测(不完全确定)是当您使用大写 Y 时,解析将转到下一个星期六并获取与该星期六相关的年份。对于 2019 年,由于今天是星期二,因此会跳转到 2020 年 1 月 4 日星期六,并显示“今年”而不是“2019 年”。

关于python - pyspark date_format 函数返回错误的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708945/

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