如何将数据框中的多个“字符串”列转换为日期时间列



我正在将多个字符串列转换为日期时间列,但我遇到了以下问题:

示例列 1:

1/11/2018 9:00:00 AM

法典:

df = df.withColumn(df.column_name, to_timestamp(df.column_name,  "MM/dd/yyyy hh:mm:ss aa"))

这工作正常

示例列 2:

2019-01-10T00:00:00-05:00

法典:

df = df.withColumn(df.column_name, to_date(df.column_name,  "yyyy-MM-dd'T'HH:mm:ss'-05:00'"))

这工作正常

示例列 3:

20190112

法典:

df = df.withColumn(df.column_name, to_date(df.column_name, "yyyyMMdd"))

这行不通。我收到此错误:

AnalysisException: "cannot resolve 'unix_timestamp(t.`date`,
'yyyyMMdd')' due to data type mismatch: argument 1 requires (string or
date or timestamp) type, however, 't.`date`' is of int type.

我觉得它应该很简单,但我错过了一些东西。

这个错误是不言自明的,你需要你的列 yo 是一个字符串。您确定您的列已经是字符串吗?似乎不是。你可以先用column.cast将其转换为字符串

import org.apache.spark.sql.types._
df = df.withColumn(df.column_name, to_date(df.column_name.cast(StringType), "yyyyMMdd")

相关内容

  • 没有找到相关文章

最新更新