在 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/Impala

如何在pyspark Hive SQL中获取等效的postgres命令'nth_value'以进行分区?

应用转换或连接条件以在 pyspark 或 hive 中实现结果

PySpark - RDD 到 JSON

PySpark Hive 查询未显示输出

如何使用 Hive 仓库连接器在 pyspark 中执行 HQL 文件