bub*_*itz 4 python datetime pyspark
我试图弄清楚如何使用Pyspark sql从datetime值中提取日期。
datetime值如下所示:
DateTime
2018-05-21T00:00:00.000-04:00
2016-02-22T02:00:02.234-06:00
Run Code Online (Sandbox Code Playgroud)
当我现在将其加载到spark数据框中并尝试提取日期时(通过
Date() or
Timestamp() and then Date()
Run Code Online (Sandbox Code Playgroud)
我总是会收到错误消息,期望使用日期或时间戳记值,但是提供了DateTime值。
有人可以帮助我从此值中检索日期吗?我认为,您需要为此提供一个时区-但由于我仅提取日期时遇到了问题,因此我首先想解决这个问题。
谢谢您的光临。
Shu*_*Shu 19
您可以使用 date_format (或)from_unixtime(或)to_date函数从输入字符串中提取日期。
例子:
输入数据df数据如下..
#sample dataframe
df=spark.createDataFrame([('2018-05-21T00:00:00.000-04:00',),('2016-02-22T02:00:02.234-06:00',)],['ts'])
#set UTC timestamp
spark.sql("set spark.sql.session.timeZone=UTC")
df.show(10,False)
#+-----------------------------+
#|ts |
#+-----------------------------+
#|2018-05-21T00:00:00.000-04:00|
#|2016-02-22T02:00:02.234-06:00|
#+-----------------------------+
Run Code Online (Sandbox Code Playgroud)
1.使用date_format()
功能:
from pyspark.sql.functions import *
df.select(date_format(col('ts'),"yyyy-MM-dd").alias('ts').cast("date")).show(10,False)
#+----------+
#|ts |
#+----------+
#|2018-05-21|
#|2016-02-22|
#+----------+
Run Code Online (Sandbox Code Playgroud)
2.使用to_date()
功能:
df.select(to_date(col('ts')).alias('ts').cast("date")).show(10,False)
#+----------+
#|ts |
#+----------+
#|2018-05-21|
#|2016-02-22|
#+----------+
Run Code Online (Sandbox Code Playgroud)
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|
#+----------+
Run Code Online (Sandbox Code Playgroud)
Pyspark具有to_date
从时间戳中提取日期的功能。在您的示例中,您可以通过执行以下操作来创建仅包含日期的新列:
df = df.withColumn("date_only", func.to_date(func.col("DateTime")))
Run Code Online (Sandbox Code Playgroud)
如果您要转换的列是字符串,则可以设置format
参数以to_date
指定字符串的日期时间格式。
您可以to_date
在此处阅读更多文档。
归档时间: |
|
查看次数: |
10350 次 |
最近记录: |