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

Posted

技术标签:

【中文标题】如何将数据框中的多个“字符串”列转换为日期时间列?【英文标题】:How do I convert multiple `string` columns in my dataframe to datetime columns? 【发布时间】:2019-04-20 22:19:29 【问题描述】:

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

示例第 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.

我觉得它应该是直截了当的,但我错过了一些东西。

【问题讨论】:

【参考方案1】:

这个错误很容易解释,你需要你的列是一个字符串。 你确定你的列已经是一个字符串吗?似乎没有。您可以先使用 column.cast 将其转换为 String

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

【讨论】:

以上是关于如何将数据框中的多个“字符串”列转换为日期时间列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Pandas 数据框中的字符串转换为“日期”数据类型?

如何在R中的数据框中转换日期/时间列

如何删除列中的多个字符串并将其替换为日期

使用 Pandas 将数据框中的 Python 对象列转换为没有日期的时间

如何转换数据框中的所有浮点列,但第一列除外?

将日期时间列转换为字符串列