【问题标题】:How to convert int value from csv to datetime in Spark SQL?如何在 Spark SQL 中将 int 值从 csv 转换为 datetime?
【发布时间】:2021-10-28 14:19:05
【问题描述】:

有这样的Spark SQL查询:

spark.sql("""SELECT date, delay, origin, destination 
FROM us_delay_flights_tbl 
WHERE delay > 120 AND ORIGIN = 'SFO' AND DESTINATION = 'ORD' 
ORDER by delay DESC""").show(10)

查看 us_delay_flights_tbl 是从下一个 csv 创建的:

日期、延迟、距离、起点、目的地

01011245,6,602,ABE,ATL

01020600,-8,369,ABE,DTW

01021245,-2,602,ABE,ATL

01020605,-4,602,ABE,ATL

01031245,-4,602,ABE,ATL

01030605,0,602,ABE,ATL

如何将字段日期转换为下一个格式的日期:02-19 09:25 am 从我的 sql 查询中的字符串 02190925?

现在,结果如下:

date delay origin destination
02190925 1638 SFO ORD
01031755 396 SFO ORD

我需要得到:

date delay origin destination
02-19 09:25 am 1638 SFO ORD
01-03 05:55 pm 396 SFO ORD

更新

我试过这段代码:

date_format(to_date(date, 'MMddHHmm'), 'MM-dd hh:mm a')

但是得到了字符串 02190925 的下一个输出:

02-19 上午 12:00

换句话说,我浪费了时间。

【问题讨论】:

    标签: apache-spark apache-spark-sql


    【解决方案1】:

    to_date 将字符串转换为date,这意味着所有“时间”部分(小时/分钟/秒)都丢失了。您应该使用to_timestamp function 而不是to_date,如下所示:

    date_format(to_timestamp(date, 'MMddHHmm'), 'MM-dd hh:mm a')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2016-08-23
      • 2021-07-22
      • 2017-01-30
      • 2011-02-24
      • 2020-03-04
      • 1970-01-01
      相关资源
      最近更新 更多