【问题标题】:Convert OffsetDateTimeUdt to date or string将 OffsetDateTimeUdt 转换为日期或字符串
【发布时间】:2018-02-21 20:45:39
【问题描述】:

我正在研究 Pyspark。 我有一个专栏end_date,我想做一些工作。但我不能因为他的类型:OffsetDateTimeUdt

这个类型可以转换成日期或字符串吗?

取值示例:2021-08-15T00:00:00.000Z

如果你有任何想法,请告诉我:)

提前致谢

【问题讨论】:

  • 你能把你试过的代码吗?
  • bio_t=bio_w.selectExpr('customer','TO_DATE(end_date) as date','operator') 我也试过 CAST
  • 说了什么? bio_t= bio_w.selectExpr('customer','CAST(TO_DATE(end_date) AS DATE) dt','operator')。你能添加错误信息吗
  • 当然:由于数据类型不匹配,你“无法解析 'CAST(ri.foundry.main.dataset.bb7b7376-3e35-46c4-beb1-0cb2b3651c89.end_date AS DATE)':不能将 com.palantir.spark.time.OffsetDateTimeUdt@0 转换为 DateType 错误消息很长但我认为最重要的是这里
  • 我建议你写一个 UDF 来将 OffsetDateTimeUdt 转换为 String/DateTime

标签: python sql datetime pyspark datetimeoffset


【解决方案1】:

通过忽略下面的毫秒来转换为时间戳

x = spark.createDataFrame([("2021-08-15T00:00:00.000Z",)], ['date_str'])
x.select(x.date_str, from_unixtime(unix_timestamp(x.date_str,"yyyy-MM-dd'T'HH:mm:ss'.000Z'"))).show(truncate=False)

输出:

+------------------------+------------------------------------------------------------------------------------------+
|date_str                |from_unixtime(unix_timestamp(date_str, yyyy-MM-dd'T'HH:mm:ss'.000Z'), yyyy-MM-dd HH:mm:ss)|
+------------------------+------------------------------------------------------------------------------------------+
|2021-08-15T00:00:00.000Z|2021-08-15 00:00:00                                                                       |
+------------------------+------------------------------------------------------------------------------------------+

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 2015-04-27
    • 2011-11-28
    • 2016-05-03
    相关资源
    最近更新 更多