Sal*_* Bz 1 apache-spark apache-spark-sql pyspark
我正在处理芝加哥数据集,日期列采用字符串格式,由日期组成,但具有两种不同的格式:
Row(Date='01/10/2008 12:00'),
Row(Date='02/25/2008 08:20:53 PM')
Run Code Online (Sandbox Code Playgroud)
我找到下面的代码并尝试了这两种代码(我不确定是否正确),但是由于它包含两种格式,所以下面的代码都会收到错误,表明找不到该格式。
data_clean = data_clean.withColumn("Date_dt", f.from_unixtime(f.unix_timestamp("Date",'MM/dd/yy hh:mm:ss aa'),'MM/dd/yyyy HH:mm:ss'))
data_clean.withColumn("Date_dt", to_timestamp("Date", "MM/dd/yy HH:mm")).show(1, False)
Run Code Online (Sandbox Code Playgroud)
我还找到了以下解决方案,但我需要一个日期时间格式,包括小时和分钟作为输出:
from pyspark.sql.functions import coalesce, to_date
def to_date_(col, formats=("MM/dd/yyyy", "yyyy-MM-dd")):
return coalesce(*[to_date(col, f) for f in formats])
Run Code Online (Sandbox Code Playgroud)
您对检查格式并根据它进行转换有何建议?
您可以使用date_format将解析的日期转换为您想要的格式:
import pyspark.sql.functions as F
df.show(truncate=0)
+----------------------+
|date |
+----------------------+
|01/10/2008 12:00 |
|02/25/2008 08:20:53 PM|
+----------------------+
df2 = df.withColumn(
'date2',
F.date_format(
F.coalesce(
F.to_timestamp('date', 'MM/dd/yyyy hh:mm:ss a'),
F.to_timestamp('date', 'MM/dd/yyyy HH:mm')
),
'MM/dd/yyyy HH:mm'
)
)
df2.show(truncate=0)
+----------------------+----------------+
|date |date2 |
+----------------------+----------------+
|01/10/2008 12:00 |01/10/2008 12:00|
|02/25/2008 08:20:53 PM|02/25/2008 20:20|
+----------------------+----------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |