【发布时间】:2016-11-17 13:18:59
【问题描述】:
我有一个带有Timestamp 列的DataFrame,我需要将其转换为Date 格式。
是否有任何可用的 Spark SQL 函数?
【问题讨论】:
标签: apache-spark apache-spark-sql
我有一个带有Timestamp 列的DataFrame,我需要将其转换为Date 格式。
是否有任何可用的 Spark SQL 函数?
【问题讨论】:
标签: apache-spark apache-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'))
【讨论】:
在 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。
【讨论】:
对于 Spark 2.4+,
import spark.implicits._
val newDF = df.withColumn("dateColumn", $"timestampColumn".cast(DateType))
或
val newDF = df.withColumn("dateColumn", col("timestampColumn").cast(DateType))
【讨论】:
最好用的东西..经过试验和测试-
df_join_result.withColumn('order_date', df_join_result['order_date'].cast('date'))
【讨论】: