Как преобразовать формат Timestamp в Date в DataFrame? У меня есть DataFrame с столбцом Timestamp, который мне нужно преобразовать в формате Date. Существуют ли для этого функции Spark SQL? Ответ 1 Вы можете cast указать столбец: Scala: 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 В 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))
Ответ 1 Вы можете cast указать столбец: Scala: 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'))
Ответ 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))