微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 spark 3.0+ 中获得一年中的一周?

如何解决如何在 spark 3.0+ 中获得一年中的一周?

我正在尝试创建一个包含日、月等列的日历文件。以下代码工作正常,但我找不到一种干净的方法提取一年中的第几周 (1-52)。在 spark 3.0+ 中,以下代码行不起作用:.withColumn("week_of_year",date_format(col("day_id"),"W"))

我知道我可以创建一个视图/表,然后在其上运行 sql 查询提取 week_of_year,但是没有更好的方法吗? `

df.withColumn("day_id",to_date(col("day_id"),date_fmt))
.withColumn("week_day","EEEE"))
.withColumn("month_of_year","M"))
.withColumn("year","y"))
.withColumn("day_of_month","d"))
.withColumn("quarter_of_year","Q"))

解决方法

你看到的异常,建议改用EXTRACT SQL函数https://spark.apache.org/docs/3.0.0/api/sql/index.html#extract

 val df =  Seq(("2019-11-16 16:50:59.406")).toDF("input_timestamp")
 df.selectExpr("input_timestamp","extract(week FROM input_timestamp) as w").show
 +--------------------+---+
 |     input_timestamp|  w|
 +--------------------+---+
 |2019-11-16 16:50:...| 46|
 +--------------------+---+
,

spark 3+ 似乎不再支持这些模式

HTTP/1.1 200 OK
Server: TornadoServer/4.4.2
Content-Type: text/html; charset=UTF-8
Date: Mon,07 Jun 2021 14:41:53 GMT
Transfer-Encoding: chunked

你可以使用这个:

Caused by: java.lang.IllegalArgumentException: All week-based patterns are unsupported since Spark 3.0,detected: w,Please use the SQL function EXTRACT instead

测试

输入

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

df.withColumn("week_of_year",weekofyear($"date"))

输出

    val df  = List("2021-05-15","1985-10-05")
               .toDF("date")
               .withColumn("date",to_date($"date","yyyy-MM-dd")

df.show
    +----------+
    |      date|
    +----------+
    |2021-05-15|
    |1985-10-05|
    +----------+

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。