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

Sha*_*kar 24 apache-spark apache-spark-sql

我有一个DataFrameTimestamp列,我需要为转换Date格式.

是否有可用的Spark SQL函数?

Dan*_*ula 51

您可以cast列到目前为止:

斯卡拉:

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

val newDF = df.withColumn("dateColumn", df("timestampColumn").cast(DateType))
Run Code Online (Sandbox Code Playgroud)

Pyspark:

df = df.withColumn('dateColumn', df['timestampColumn'].cast('date'))
Run Code Online (Sandbox Code Playgroud)

  • @dslack此解决方案使用可用作Spark SQL包的一部分的函数,但它不使用SQL语言,而是使用强大的DataFrame API,具有类似SQL的函数,而不是使用不太可靠的字符串和实际的SQL查询. (7认同)
  • 这不是Spark SQL. (3认同)

dsl*_*ack 14

在SparkSQL中:

SELECT
  CAST(the_ts AS DATE) AS the_date
FROM the_table
Run Code Online (Sandbox Code Playgroud)


Mar*_*ace 5

想象一下以下输入:

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)
Run Code Online (Sandbox Code Playgroud)

您可以使用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|
+---+---------+-----------------------+----------+
Run Code Online (Sandbox Code Playgroud)

我建议优先使用这些方法而不是强制转换和普通 SQL。