【问题标题】:How to add extra date column in DataFrame by using Spark?如何使用 Spark 在 DataFrame 中添加额外的日期列?
【发布时间】:2021-12-27 14:10:34
【问题描述】:

我有变量,例如:

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

【问题讨论】:

  • 看看静态函数,可能会更简单。抱歉,对 Scala 不太熟悉。

标签: scala apache-spark date datetime timestamp


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 2015-12-23
    • 2016-02-14
    • 2018-06-25
    相关资源
    最近更新 更多