如何将Timestamp转换为DataFrame中的日期格式?

问题描述:

我有一个DataFrameTimestamp列,我需要转换为Date格式。如何将Timestamp转换为DataFrame中的日期格式?

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

可以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')) 
+2

这不是Spark SQL。 – dslack

+1

@dslack该解决方案使用作为Spark SQL包的一部分提供的函数,但它不使用SQL语言,而是使用健壮的DataFrame API和SQL类函数,而不是使用不太可靠的字符串和实际的SQL查询。 –

+0

关于SQL查询的可靠性较低? – dslack

在SparkSQL:

SELECT CAST(the_ts AS DATE) AS the_date FROM the_table

想象一下以下输入:

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。