在 Pyspark Interactive Shell 中查找列的增量

Posted

技术标签:

【中文标题】在 Pyspark Interactive Shell 中查找列的增量【英文标题】:Finding the Delta of a Column within Pyspark Interactive Shell 【发布时间】:2020-10-24 20:48:34 【问题描述】:

我有这个数据框:

DataFrame[visitors: int, beach: string, Date: date]

有以下数据:

+-----------+-------------+--------+
|date       |beach        |visitors| 
+-----------+------------+---------+
|2020-03-02 |Bondi Beach |205      |
|2020-03-02 |Nissi Beach |218      |
|2020-03-03 |Bar Beach   |201      |
|2020-03-04 |Navagio     |102      |
|2020-03-04 |Champangne  |233      |
|2020-03-05 |Lighthouse  |500      |
|2020-03-06 |Mazo        |318      |
+-----------+------------+---------+

我正在寻找使用访问者列中的数据来查找这些列的增量。 预期输出:

+-----------+-------------+--------+-------+
|date       |beach        |visitors| Delta | 
+-----------+------------+---------+-------+
|2020-03-02 |Bondi Beach |205      |-13    | (205-218)
|2020-03-02 |Nissi Beach |218      |17     | (218-201)
|2020-03-03 |Bar Beach   |201      |99     | (201-102)
|2020-03-04 |Navagio     |102      |-131   | (102-233)
|2020-03-04 |Champangne  |233      |-267   | (233-500)
|2020-03-05 |Lighthouse  |500      |182    | (500-318)
|2020-03-06 |Mazo        |318      |318    | (318-0)
+-----------+------------+---------+-------+

【问题讨论】:

【参考方案1】:

您可以使用lead 函数来解决您的问题。由于最后一行的leadnull,所以我使用coalesce 函数将nulls 替换为访问者的列。

from pyspark.sql.window import Window
from pyspark.sql.functions import *

w=Window().orderBy("date")

df.withColumn("delta", col("visitors") - lead("visitors").over(w))\
    .withColumn('delta', coalesce('delta', 'visitors')).show()

+----------+-----------+--------+-----+
|      date|      beach|visitors|delta|
+----------+-----------+--------+-----+
|2020-03-02|Bondi Beach|     205|  -13|
|2020-03-02|Nissi Beach|     218|   17|
|2020-03-03|  Bar Beach|     201|   99|
|2020-03-04|    Navagio|     102| -131|
|2020-03-04| Champangne|     233| -267|
|2020-03-05| Lighthouse|     500|  182|
|2020-03-06|       Mazo|     318|  318|
+----------+-----------+--------+-----+

注意:我只是按date 字段排序。最好在 order by 子句中包含另一列(如 id),以便保持顺序。此外,使用没有分区的窗口可能会对性能产生影响。

【讨论】:

以上是关于在 Pyspark Interactive Shell 中查找列的增量的主要内容,如果未能解决你的问题,请参考以下文章

shell入门笔记1:执行方式运行方式变量替换

shell入门笔记1:执行方式运行方式变量替换运算符

linux_shell 编程学习-初识she'll

she runs 后填以a开头的单词

如何在“webgl_interactive_cubes”示例中使用“OculusRiftEffect.js”

vb保存she皮肤