美文网首页
【PySpark系列(五)】窗口Window定义、窗口函数超详细

【PySpark系列(五)】窗口Window定义、窗口函数超详细

作者: 小北觅 | 来源:发表于2022-05-18 22:58 被阅读0次

本文主要介绍如下知识点:
① pyspark.sql.Window。什么是窗口?如何创建窗口?怎么理解窗口的含义?
② currentRow、unboundedFollowing、unboundedPreceding的含义。
③ rangeBetween()、rowsBetween()、rangeBetween()、rowsBetween()的含义。
④ 排名函数、分析函数、聚合函数在窗口上的应用。

在上一篇文章介绍partition by的使用实例时,我们用了窗口函数Window。本文我们就来详细介绍Window窗口、以及一些窗口函数的作用及使用方法。

当我们需要在DataFrame列的特定窗口中进行聚合操作时,Window窗口函数会派上用场。Window窗口函数在实际业务场景中非常实用,用的好的话能避免很多浪费时间的计算。

一、什么是窗口(Window)及如何使用PySpark中的Window?

1.1 什么是窗口?

在单表数据操作中,一般有下面两种操作范式:

  • 针对单条数据的映射操作,例如每条数据加一的时候。
  • 将数据分组后的聚合操作,例如进行分组统计的时候。

在第一种范式中有这样一种情况,当你要生成某条目标数据的时候你需要用到前后N条数据参与计算。

例如:当你需要基于每天的用户访问数,来计算七天的移动平均访问数,就需要按照时间排序,每一条数据的计算都需要前面6条数据一起参与计算。那这时就需要用到窗口(Window)的概念了,当前行(currentRow)与当前行的前6行一起组成了一个窗口。

窗口有点类似于group by,只不过窗口不会对结果进行分组,输出中的行数与输入中的行数相同。

1.2 PySpark中如何定义我们需要的指定范围的窗口?

首先我们需要了解一下窗口的位置属性:

  • Window.unboundedPreceding:窗口的第一行
  • Window.unboundedFollowing:窗口的最后一行
  • Window.currentRow:窗口的当前行

在进行窗口移动时,窗口的当前行(currentRow)的位置是0,如果position小于0,表示在当前行之前,如果position大于0,表示在当前行之后。

举个例子:

相关文章

网友评论

      本文标题:【PySpark系列(五)】窗口Window定义、窗口函数超详细

      本文链接:https://www.haomeiwen.com/subject/oxszurtx.html