如何在 DataFrame 中将时间戳转换为日期格式?

Posted

技术标签:

【中文标题】如何在 DataFrame 中将时间戳转换为日期格式?【英文标题】:How to convert Timestamp to Date format in DataFrame? 【发布时间】:2016-11-17 13:18:59 【问题描述】:

我有一个带有Timestamp 列的DataFrame,我需要将其转换为Date 格式。

是否有任何可用的 Spark SQL 函数?

【问题讨论】:

【参考方案1】:

您可以cast该专栏至今:

斯卡拉:

import org.apache.spark.sql.types.DateType

val newDF = df.withColumn("dateColumn", df("timestampColumn").cast(DateType))

Pyspark:

df = df.withColumn('dateColumn', df['timestampColumn'].cast('date'))

【讨论】:

这不是 Spark SQL。 @dslack 此解决方案使用 Spark SQL 包中可用的函数,但它不使用 SQL 语言,而是使用强大的 DataFrame API 和类似 SQL 的函数,而不是使用具有实际 SQL 查询的不太可靠的字符串。 SQL 查询有哪些不可靠的地方? @dslack 好吧,这完全取决于应用程序。一般来说,如果您的目标是生成可靠且可测试的稳定代码库,则不太建议使用查询字符串,因为它们更难更改,更容易犯简单的错误并且模块化程度较低。 需要帮助。通过 jdbc 从数据库中读取数据。 Oracle 表具有 2016 年 12 月 15 日作为具有 DATE 数据类型的字段。 Dataframe.printSchema() 显示时间戳。但是当我打印它时,它显示所有空值。【参考方案2】:

在 SparkSQL 中:

SELECT
  CAST(the_ts AS DATE) AS the_date
FROM the_table

【讨论】:

【参考方案3】:

想象以下输入:

val dataIn = spark.createDataFrame(Seq(
        (1, "some data"),
        (2, "more data")))
    .toDF("id", "stuff")
    .withColumn("ts", current_timestamp())

dataIn.printSchema
root
 |-- id: integer (nullable = false)
 |-- stuff: string (nullable = true)
 |-- ts: timestamp (nullable = false)

你可以使用to_date函数:

val dataOut = dataIn.withColumn("date", to_date($"ts"))

dataOut.printSchema
root
 |-- id: integer (nullable = false)
 |-- stuff: string (nullable = true)
 |-- ts: timestamp (nullable = false)
 |-- date: date (nullable = false)

dataOut.show(false)
+---+---------+-----------------------+----------+
|id |stuff    |ts                     |date      |
+---+---------+-----------------------+----------+
|1  |some data|2017-11-21 16:37:15.828|2017-11-21|
|2  |more data|2017-11-21 16:37:15.828|2017-11-21|
+---+---------+-----------------------+----------+

我会推荐使用这些方法而不是强制转换和普通 SQL。

【讨论】:

【参考方案4】:

对于 Spark 2.4+,

import spark.implicits._
val newDF = df.withColumn("dateColumn", $"timestampColumn".cast(DateType))    

val newDF = df.withColumn("dateColumn", col("timestampColumn").cast(DateType))

【讨论】:

【参考方案5】:

最好用的东西..经过试验和测试-

df_join_result.withColumn('order_date', df_join_result['order_date'].cast('date'))

【讨论】:

以上是关于如何在 DataFrame 中将时间戳转换为日期格式?的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas 中将字符串列转换为日期的有效方法(在 Python 中),但没有时间戳

如何在雪花中将时间戳转换为日期

如何在 Presto 中将时间戳转换为日期?

如何在 Kotlin 中将 Firestore 日期/时间戳转换为日期?

如何在Oracle中将时间戳转化为日期格式

如何在Android中将时间戳字符串转换为日期[重复]