【问题标题】:Spark scala: obtaining weekday from utcstamp (function works for specific date, not for entire column)Spark scala:从 utcstamp 获取工作日(函数适用于特定日期,不适用于整个列)
【发布时间】:2021-04-16 08:36:46
【问题描述】:

我有一个 scala / spark 数据框,其中有一列名为“utcstamp”,其值的格式如下:2018-12-12 21:15:00

我想获取一个带有工作日的新专栏,灵感来自论坛中this的问题,使用了以下代码:

import java.util.Calendar
import java.text.SimpleDateFormat

val dowText = new SimpleDateFormat("E")
df = df.withColumn("weekday" , dowText.format(df.select(col("utcstamp"))))

但是,我收到以下错误:

<console>:58: error: type mismatch;
 found   : String
 required: org.apache.spark.sql.Column
   

当我尝试将此应用于特定日期(如提供的链接中)时,它可以工作,但我无法将其应用于整个列。

谁能帮我解决这个问题?如果您有另一种将 utc 列转换为工作日的方法,我也可以这样做。

【问题讨论】:

    标签: scala apache-spark datetime apache-spark-sql weekday


    【解决方案1】:

    您可以使用 Spark SQL 的 dayofweek 函数,它为您提供从 1 到 7 的数字,表示周日到周六:

    val df2 = df.withColumn("weekday", dayofweek(col("utcstamp").cast("timestamp")))
    

    或者,如果您想要单词(Sun-Sat),

    val df2 = df.withColumn("weekday", date_format(col("utcstamp").cast("timestamp"), "EEE"))
    

    【讨论】:

      【解决方案2】:

      您可以简单地获取日期格式为 "E"EEEE 的星期几(例如星期日和星期日)

      df.withColumn("weekday", date_format(to_timestamp($"utcstamp"), "E"))
      

      如果您想将星期几作为数值,请使用 dayofweek 函数,该函数可从 spark 2.3+ 获得

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多