Pyspark:从Datetime值中提取日期

时间:2018-08-16 15:38:39

标签: python datetime pyspark

我试图弄清楚如何使用Pyspark sql从datetime值中提取日期。

日期时间值如下:

DateTime
2018-05-21T00:00:00.000-04:00
2016-02-22T02:00:02.234-06:00

当我现在将其加载到spark数据框中并尝试提取日期时(通过

Date() or
Timestamp() and then Date()

我总是会收到错误消息,期望有日期或时间戳值,但是提供了DateTime值。

有人可以帮助我从此值中检索日期吗?我认为,您需要为此提供一个时区-但由于我已经无法提取日期,因此我首先想解决这个问题。

谢谢您的问候。

2 个答案:

答案 0 :(得分:3)

Pyspark具有to_date函数,用于从时间戳中提取日期。在您的示例中,您可以通过执行以下操作来创建一个仅包含日期的新列:

df = df.withColumn("date_only", func.to_date(func.col("DateTime")))

如果您要转换的列是字符串,则可以设置format的{​​{1}}参数,指定字符串的日期时间格式。

您可以在here文档中详细了解to_date

答案 1 :(得分:1)

您可以使用 date_format  (或)from_unixtime(或)to_date函数从输入字符串中提取日期。

示例:

按如下所示输入数据df数据。

>>> df.show(10,False)
+-----------------------------+
|ts                           |
+-----------------------------+
|2018-05-21T00:00:00.000-04:00|
|2016-02-22T02:00:02.234-06:00|
+-----------------------------+

1。使用date_format函数:

>>> df.select(date_format(col('ts'),"yyyy-MM-dd").alias('ts').cast("date")).show(10,False)
+----------+
|ts        |
+----------+
|2018-05-21|
|2016-02-22|
+----------+

2。使用to_date函数:

>>> df.select(to_date(col('ts')).alias('ts').cast("date")).show(10,False)
+----------+
|ts        |
+----------+
|2018-05-21|
|2016-02-22|
+----------+

3。使用from_unixtime和unix_timestamp函数:

>>> df.select(from_unixtime(unix_timestamp(col('ts'),"yyyy-MM-dd'T'HH:mm:ss.SSS"),"yyyy-MM-dd").alias("ts").cast("date")).show(10,False)
+----------+
|ts        |
+----------+
|2018-05-21|
|2016-02-22|
+----------+