如何使用 Spark 在 DataFrame 中添加额外的日期列?

How to add extra date column in DataFrame by using Spark?

我有变量,例如:

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 中使用该日期。我怎样才能做到最好?使用哪些类型?

您可以使用已解析的字符串 val dateString = s"$loadingDate.format(formatter)" 并使用 to_date() 函数将其转换为 Spark DateType,首先您必须将 String 转换为文字(或者换句话说,将您的字符串表示为一列),为此使用 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()