首页 > 解决方案 > 如何使用 Spark 在 DataFrame 中添加额外的日期列?

问题描述

我有变量,例如:

val loadingDate: = LocalDateTime.of(2020, 1, 2, 0, 0, 0)

我需要使用这个变量的值添加一个额外的列。

当我尝试这样做时:

val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")

DF.withColumn("dttm", expr(s"$loadingDate.format(formatter)}").cast("timestamp"))

我收到这样的错误:

Exception in thread "main" java.lang.reflect.InvocationTargetException

Caused by: org.apache.spark.sql.catalyst.parser.ParseException

mismutched input '00' expecting <EOF>(line 1, pos 11)

==SQL==

2020-01-02 00:00:00

-------------^^^

我可以使用 LocalDateTime 类型的变量在 Spark 中添加额外的列吗?还是我必须使用其他类型?

我需要从外部系统获取日期并在 Spark 中使用此日期。我怎样才能以最好的方式做到这一点?使用哪些类型?

标签: scalaapache-sparkdatedatetimetimestamp

解决方案


您可以使用解析后的字符串并使用函数val dateString = s"$loadingDate.format(formatter)"将其转换为 Spark ,首先您必须将 String 转换为文字(或者换句话说,将您的字符串表示为一列),这样做使用.DateTypeto_date()lit(dateString)

val date: LocalDateTime = LocalDateTime.of(2020, 1, 2, 0,0, 0)
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val formattedDate = date.format(formatter).

val dfWithYourDate = df.withColumn("your_date", to_date(lit(formattedDate), "yyyy-MM-dd HH:mm:ss"))

如果您需要TimestampType代替to_date()使用功能to_timestamp()


推荐阅读