如何理解spark sql窗口函数的结果

汤姆

我有以下代码来尝试 spark sql 窗口函数:

test("spark sql time window 2") {
    val spark = SparkSession.builder().master("local").appName("SparkSQLWindowTest").getOrCreate()
    import spark.implicits._
    import org.apache.spark.sql.functions._
    val ds = Seq(
      SaleRecord("2017-10-11 09:01:12", 1),
      SaleRecord("2017-10-11 09:01:18", 6),
      SaleRecord("2017-10-11 10:11:12", 2),
      SaleRecord("2017-10-11 10:18:13", 5),
      SaleRecord("2017-10-11 10:22:13", 3),
      SaleRecord("2017-10-11 10:22:22", 6),
      SaleRecord("2017-10-11 10:34:56", 2),
      SaleRecord("2017-10-11 10:48:22", 6),
      SaleRecord("2017-10-11 11:52:23", 4),
      SaleRecord("2017-10-11 12:56:24", 2)).toDS

    val ds2 = ds.groupBy(window($"Time", "20 minutes", "9 minutes")).agg(sum("revenue")).orderBy("window.start")
    ds2.show(truncate = false)

    /*
+---------------------------------------------+------------+
|window                                       |sum(revenue)|
+---------------------------------------------+------------+
|[2017-10-11 08:45:00.0,2017-10-11 09:05:00.0]|7.0         |
|[2017-10-11 08:54:00.0,2017-10-11 09:14:00.0]|7.0         |
|[2017-10-11 09:57:00.0,2017-10-11 10:17:00.0]|2.0         |
|[2017-10-11 10:06:00.0,2017-10-11 10:26:00.0]|16.0        |
|[2017-10-11 10:15:00.0,2017-10-11 10:35:00.0]|16.0        |
|[2017-10-11 10:24:00.0,2017-10-11 10:44:00.0]|2.0         |
|[2017-10-11 10:33:00.0,2017-10-11 10:53:00.0]|8.0         |
|[2017-10-11 10:42:00.0,2017-10-11 11:02:00.0]|6.0         |
|[2017-10-11 11:36:00.0,2017-10-11 11:56:00.0]|4.0         |
|[2017-10-11 11:45:00.0,2017-10-11 12:05:00.0]|4.0         |
|[2017-10-11 12:39:00.0,2017-10-11 12:59:00.0]|2.0         |
|[2017-10-11 12:48:00.0,2017-10-11 13:08:00.0]|2.0         |
+---------------------------------------------+------------+


     */
  }

SaleRecord 的定义是一个简单的案例类:

case class SaleRecord(time: String, revenue: Double)

我无法理解结果中的前三行是如何生成的?

为什么第一个窗口是 [2017-10-11 08:45:00.0,2017-10-11 09:05:00.0]

Zhang Tong
window(timeColumn, windowDuration, slideDuration=None, startTime=None)

首先,window函数将创建一个时间模板,这意味着:

zero = 1970-01-01 00:00:00 UTC

[zero + startTime + slideDuration * n, zero + startTime + slideDuration * n + windowDuration)

例如:

window('ts', '5 seconds', '3 seconds', '2 seconds')
# is equal to :
['1970-01-01 00:00:02', '1970-01-01 00:00:07'),
['1970-01-01 00:00:05', '1970-01-01 00:00:10'),
['1970-01-01 00:00:08', '1970-01-01 00:00:13'),
['1970-01-01 00:00:11', '1970-01-01 00:00:16'),
...

然后,在你的数据帧的每一行都将“陷入”时间模板,根据timeColumn一行可以属于多个时间模板单元格。

最后,放下所有空的时间模板单元并执行agg

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spark SQL-使用Spark SQL窗口函数获取每个窗口的行数

来自分类Dev

如何过滤理解结果?

来自分类Dev

如何理解mongostat的结果?

来自分类Dev

如何在Hive / Spark SQL中使用窗口函数删除重叠

来自分类Dev

带条件的Spark SQL窗口函数范围边界

来自分类Dev

限制在SQL窗口函数中设置的结果

来自分类Dev

如何在SQL Developer的查询结果窗口中显示`open:x for << select statement >>的结果

来自分类Dev

如何在条件列表理解中使用函数调用结果?

来自分类Dev

如何在SQL中执行此操作(PostgreSQL窗口函数?)

来自分类Dev

如何使用SQL Server 2012窗口函数完成查询?

来自分类Dev

sql如何从窗口函数中提取最常见的值

来自分类Dev

在引导弹出窗口中,如何从函数的结果中获取内容

来自分类Dev

在Apache Spark SQL中,如何在窗口函数中使用collect_list时删除重复的行?

来自分类Dev

PL/SQL 如何从返回类型表的函数中获取结果

来自分类常见问题

如何在Spark / Cala中使用窗口函数使用countDistinct?

来自分类Dev

如何在Spark窗口函数中以降序使用orderby()?

来自分类Dev

如何在Spark中使用窗口函数过滤数据

来自分类Dev

如何在Spark / Cala中使用窗口函数使用countDistinct?

来自分类Dev

如何理解函数中的指针

来自分类Dev

在SQL中,如何在文本中添加换行符并在“结果”窗口中显示文本?

来自分类Dev

如何理解函数的函数参数中的星号(*)?

来自分类Dev

如何理解这两个结果?

来自分类Dev

Spark SQL窗口顺序的行为

来自分类Dev

遍历列表理解中的函数结果

来自分类Dev

Scrapy:继续处理解析函数的结果

来自分类Dev

如何使用窗口函数向SQL查询添加新的计算列?

来自分类Dev

如何在 sql 中使用窗口函数来持久化记录

来自分类Dev

如何使用spark / scala像show()对dataframe那样显示来自列函数的结果结果

来自分类Dev

如何使用spark / scala像show()对dataframe那样显示来自列函数的结果结果

Related 相关文章

  1. 1

    Spark SQL-使用Spark SQL窗口函数获取每个窗口的行数

  2. 2

    如何过滤理解结果?

  3. 3

    如何理解mongostat的结果?

  4. 4

    如何在Hive / Spark SQL中使用窗口函数删除重叠

  5. 5

    带条件的Spark SQL窗口函数范围边界

  6. 6

    限制在SQL窗口函数中设置的结果

  7. 7

    如何在SQL Developer的查询结果窗口中显示`open:x for << select statement >>的结果

  8. 8

    如何在条件列表理解中使用函数调用结果?

  9. 9

    如何在SQL中执行此操作(PostgreSQL窗口函数?)

  10. 10

    如何使用SQL Server 2012窗口函数完成查询?

  11. 11

    sql如何从窗口函数中提取最常见的值

  12. 12

    在引导弹出窗口中,如何从函数的结果中获取内容

  13. 13

    在Apache Spark SQL中,如何在窗口函数中使用collect_list时删除重复的行?

  14. 14

    PL/SQL 如何从返回类型表的函数中获取结果

  15. 15

    如何在Spark / Cala中使用窗口函数使用countDistinct?

  16. 16

    如何在Spark窗口函数中以降序使用orderby()?

  17. 17

    如何在Spark中使用窗口函数过滤数据

  18. 18

    如何在Spark / Cala中使用窗口函数使用countDistinct?

  19. 19

    如何理解函数中的指针

  20. 20

    在SQL中,如何在文本中添加换行符并在“结果”窗口中显示文本?

  21. 21

    如何理解函数的函数参数中的星号(*)?

  22. 22

    如何理解这两个结果?

  23. 23

    Spark SQL窗口顺序的行为

  24. 24

    遍历列表理解中的函数结果

  25. 25

    Scrapy:继续处理解析函数的结果

  26. 26

    如何使用窗口函数向SQL查询添加新的计算列?

  27. 27

    如何在 sql 中使用窗口函数来持久化记录

  28. 28

    如何使用spark / scala像show()对dataframe那样显示来自列函数的结果结果

  29. 29

    如何使用spark / scala像show()对dataframe那样显示来自列函数的结果结果

热门标签

归档