我想将时间戳记值拆分为日期和时间。
例如:
1/20/2016 3:20:30 PM
1/20/2016 3:20:31 PM
1/20/2016 3:20:32 PM
1/20/2016 3:20:32 PM
1/20/2016 3:20:32 PM
1/20/2016 3:20:33 PM
1/20/2016 3:20:34 PM
1/20/2016 3:20:34 PM
Run Code Online (Sandbox Code Playgroud)
需要分为2016年1月20日和下午3:20:30
使用SQL溢漏功能,我无法正确处理
split_col = pyspark.sql.functions.split(df['ServerTime'], ' ')
df_date = df.withColumn('Date', split_col.getItem(0))
df_time = df.withColumn('Time', split_col.getItem(1))
Run Code Online (Sandbox Code Playgroud)
有帮助吗????
由于日期和时间可以采用任何格式,因此正确的方法是将日期字符串转换为Datetype()并从中提取日期和时间部分。
让我们获取以下示例数据
server_times = sc.parallelize([('1/20/2016 3:20:30 PM',),
('1/20/2016 3:20:31 PM',),
('1/20/2016 3:20:32 PM',)]).toDF(['ServerTime'])
Run Code Online (Sandbox Code Playgroud)
该日期和时间部分可以如下任何格式中提取。
from pyspark.sql.functions import unix_timestamp, from_unixtime, date_format
df.select(unix_timestamp(df.ServerTime, 'm/d/yyyy h:m:ss a').alias('ut'))\
.select(from_unixtime('ut').alias('dty'))\
.select(date_format('dty', 'M/d/yyyy').alias('Date'),
date_format('dty', 'h:m:s a').alias('Time'))\
.show()
+---------+----------+
| Date| Time|
+---------+----------+
|1/20/2016|3:20:30 PM|
|1/20/2016|3:20:31 PM|
|1/20/2016|3:20:32 PM|
+---------+----------+
Run Code Online (Sandbox Code Playgroud)
如果需要,可以将这两个项目投影到单独的数据框中。
您可以使用pyspark.sql.functions.concat将相关时间位再次连接在一起。我们首先创建一些测试数据:
df = sc.parallelize([('1/20/2016 3:20:30 PM',),
('1/20/2016 3:20:31 PM',),
('1/20/2016 3:20:32 PM',)]).toDF(['ServerTime'])
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
import pyspark.sql.functions as F
split_col = pyspark.sql.functions.split(df['ServerTime'], ' ')
df_date = df.withColumn('Date', split_col.getItem(0))
df_time = df.withColumn('Time', F.concat(split_col.getItem(1),F.lit(' '),split_col.getItem(2)))
Run Code Online (Sandbox Code Playgroud)
运行后df_time.show(),返回以下输出:
+--------------------+----------+
| ServerTime| Time|
+--------------------+----------+
|1/20/2016 3:20:30 PM|3:20:30 PM|
|1/20/2016 3:20:31 PM|3:20:31 PM|
|1/20/2016 3:20:32 PM|3:20:32 PM|
+--------------------+----------+
Run Code Online (Sandbox Code Playgroud)
运行df_date.show()返回:
+--------------------+---------+
| ServerTime| Date|
+--------------------+---------+
|1/20/2016 3:20:30 PM|1/20/2016|
|1/20/2016 3:20:31 PM|1/20/2016|
|1/20/2016 3:20:32 PM|1/20/2016|
+--------------------+---------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5799 次 |
| 最近记录: |