在 Hive 或 Pyspark 中查询以获取每个星期日和星期六的日期
Posted
技术标签:
【中文标题】在 Hive 或 Pyspark 中查询以获取每个星期日和星期六的日期【英文标题】:Query to get date of every Sunday & Saturday in Hive or Pyspark 【发布时间】:2020-11-03 07:46:54 【问题描述】:我想从给定日期获取 Hive 中所有星期日和星期六的日期。 例如,如果给定日期是 2020-10-01,则需要返回两行 sunday_dates、saturday_dates,其值为“2020-10-01”之后的所有星期日和星期六。
我尝试了类似的方法,但似乎不适合我。
spark.sql("select date_sub('2020-10-01', cast(date_format(current_date(),'u')%7 as int)) as sunday_dates").show(10,False)
+------------+
|sunday_dates|
+------------+
|2020-09-29 |
+------------+
有什么方法可以在 Hive 或 pyspark 中实现这一点。
谢谢!
【问题讨论】:
如果这对您有帮助,请您帮忙投票解决方案.. 将不胜感激 【参考方案1】:您需要使用 date_trunc()
才能到达星期开始日期 发布 date_sub()
和 date_sub()
以便得到周六和周日
在此处创建数据框
df = spark.createDataFrame([("2020-11-02",1),("2020-11-03",2),("2020-11-04",3)],["event_dt","word"])
df.show()
df = df.withColumn("week_start", F.date_trunc('WEEK', F.col("event_dt")))
#`In case you want to get backward weekdays`
df = df.selectExpr('*', 'date_sub(week_start, 2) as backward_Saturday')
df = df.selectExpr('*', 'date_sub(week_start, 1) as backward_Sunday')
# In case you want forward weekends
df = df.selectExpr('*', 'date_add(week_start, 5) as forward_Saturday')
df = df.selectExpr('*', 'date_add(week_start, 6) as forward_Sunday')
df.show()
输入
+----------+----+
| event_dt|word|
+----------+----+
|2020-11-02| 1|
|2020-11-03| 2|
|2020-11-04| 3|
+----------+----+
输出
+----------+----+-------------------+-----------------+---------------+----------------+--------------+
| event_dt|word| week_start|backward_Saturday|backward_Sunday|forward_Saturday|forward_Sunday|
+----------+----+-------------------+-----------------+---------------+----------------+--------------+
|2020-11-02| 1|2020-11-02 00:00:00| 2020-10-31| 2020-11-01| 2020-11-07| 2020-11-08|
|2020-11-03| 2|2020-11-02 00:00:00| 2020-10-31| 2020-11-01| 2020-11-07| 2020-11-08|
|2020-11-04| 3|2020-11-02 00:00:00| 2020-10-31| 2020-11-01| 2020-11-07| 2020-11-08|
+----------+----+-------------------+-----------------+---------------+----------------+--------------+
【讨论】:
以上是关于在 Hive 或 Pyspark 中查询以获取每个星期日和星期六的日期的主要内容,如果未能解决你的问题,请参考以下文章
如何在pyspark Hive SQL中获取等效的postgres命令'nth_value'以进行分区?