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

2022-05-18  本文已影响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中如何定义我们需要的指定范围的窗口?

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

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

举个例子:

上一篇下一篇

猜你喜欢

热点阅读