Spark:如何从纪元列创建新的日期字符串列?

时间:2018-10-19 01:15:22

标签: apache-spark apache-spark-sql

我有一个Apache Spark 2.x数据框,其中包含以下列:

scala> df.printSchema
root
 |-- id: string (nullable = true)
 |-- countryCode: string (nullable = true)
 |-- detail: string (nullable = true)
 |-- epoch: long (nullable = true)

我想基于纪元时间戳(Unix UTC时间)以“ yyyy-MM-dd”格式创建带有日期字符串的新列。然后,我将日期字符串用作分区列。

如何创建带有日期字符串的列?要仅执行Java转换,我将使用SimpleDateFormat("yyyy-MM-dd"),但是我不确定如何也创建新列。

1 个答案:

答案 0 :(得分:1)

方法from_unixtime应该是您想要的。例如:

import org.apache.spark.sql.functions._

val df = Seq(
  (1, "1538384400"),
  (2, "1538481600"),
  (3, "1538588200")
).toDF("id", "epoch")

df.withColumn("date", from_unixtime($"epoch", "yyyy-MM-dd")).
  show
// +---+----------+----------+
// | id|     epoch|      date|
// +---+----------+----------+
// |  1|1538384400|2018-10-01|
// |  2|1538481600|2018-10-02|
// |  3|1538588200|2018-10-03|
// +---+----------+----------+