淘先锋技术网

首页 1 2 3 4 5 6 7

25.

Spark Sql求出每一周的周一和周日

当看到这个需求时,很自然的想到用 date_sub或date_add函数,但参考官方文档的函数说明,发现其用法跟关心型数据库sql语法不太一致,需要做一些转换才可以达到想要的效果。

https://spark.apache.org/docs/1.6.0/api/java/org/apache/spark/sql/functions.html#date_add(org.apache.spark.sql.Column,%20int)

所以有一个变通的方法。 date_sub或者date_add与next函数相结合来满足这个需求

# date_value 2019-07-31
.withColumn("week_first_date_id", date_sub(next_day($"date_value", "monday"), 7))
.withColumn("week_end_date_id", when($"days_of_week" === 7, $"date_value")
                                .otherwise(next_day($"date_value", "sunday").cast(StringType))
                         )

如下是demo输出结果

 

此贴来自汇总贴的子问题,只是为了方便查询。

总贴请看置顶帖:

pyspark及Spark报错问题汇总及某些函数用法。

https://blog.csdn.net/qq0719/article/details/86003435