【问题标题】:Pyspark to filter date in format yyyy/mm/ddPyspark 以 yyyy/mm/dd 格式过滤日期
【发布时间】:2021-11-25 00:22:59
【问题描述】:

我想以 yyy-mm-dd 格式过滤日期时间列的数据。但是,它的字符串值和日期有一个时间戳关联。我不希望我的专栏中有这个时间戳。我正在使用 Pyspark。

日期格式- 2021/09/23 09:00:00+00,

格式待完成-2021-09-23

from pyspark.sql.functions import to_date
df = df_pyspark.withColumn("date_only",to_date(col("DateTime"))) #col name in data is DateTime

date_only 显示空值。我应该如何接近这里?

【问题讨论】:

  • 日期列没有格式。它在内部存储为时间戳(int)。只有当数据显示出来时,才会转换成人类可读的格式,一般是YYYY-MM-DD HH:MI:SS.s
  • 在这种情况下,日期是一个字符串,我如何从中删除时间戳?
  • 你想要一个去掉时间戳部分的字符串吗?具有不同日期格式的字符串(- 破折号而不是 / 斜杠)?还是一个简单的日期列?

标签: python string datetime pyspark timestamp


【解决方案1】:

使用to_date函数时,需要传递一个格式字符串。可以使用simpleDateFormat 的官方文档创建格式字符串 - 可直接从 spark 文档中获得。
在您的情况下,格式为 yyyy/MM/dd HH:mm:ssX

df.withColumn("t", F.to_date("datetime", "yyyy/MM/dd HH:mm:ssX")).show(truncate=False)                                                                                              
+----------------------+----------+
|DateTime              |t         |
+----------------------+----------+
|2021/09/23 09:00:00+00|2021-09-23|
+----------------------+----------+

然后您可以按日期过滤:

df.where(F.to_date("datetime", "yyyy/MM/dd HH:mm:ssX") == "2021-09-23").show()                                                                                                       
+--------------------+                                                          
|            DateTime|
+--------------------+
|2021/09/23 09:00:...|
+--------------------+

【讨论】:

  • 谢谢!它有帮助!
猜你喜欢
  • 2015-06-11
  • 2014-05-05
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
相关资源
最近更新 更多