pyspark 按Pysark DataFrame中的特定值筛选

l5tcr1uw  于 2022-11-21  发布在  Spark
关注(0)|答案(1)|浏览(204)

我有一个犯罪数据集,需要绘制过去3年(2019年、2020年、2021年)所有犯罪的月度时间序列折线图。我的方法是创建一个新的 Dataframe ,其中每月的计数是2019-202年的事件总数,然后绘制该 Dataframe 。
例如
enter image description here
目前我已经得出的表如下:

我知道我将不得不使用聚合求和函数,但我是新来的,不确定的方法。
如需更多信息,请回复!
我尝试使用多个过滤器,如df.filter(...)沿着.agg(),但仍然无法获得正确的语法或方法。

xzlaal3s

xzlaal3s1#

由于spark的分布式体系结构,数据集行被分割到不同的工作节点和分区上。在spark中,下一行的计算依赖于前一行的输出的操作更加棘手。
首先,按组对数据进行分区。在您的情况下,没有这样的组,因此为所有行引入一个具有常量值的伪键。然后按此键进行分区,并按必填字段排序。在您的情况下,首先按“年”排序,然后按“月”排序。现在在此窗口中执行求和以获得运行总计:

import pyspark.sql.functions as F
from pyspark.sql import Window

df = spark.createDataFrame(data=[[2021, 12, 50],[2021, 11, 50],[2022, 2, 50],[2022, 1, 50],[2022, 10, 50]], schema=["year","month","count"])

df = df.withColumn("dummy_key", F.lit("0"))

w = Window.partitionBy("dummy_key").orderBy("year", "month")

df = df.withColumn("running_total", F.sum("count").over(w))

[Out]:
+----+-----+-----+---------+-------------+
|year|month|count|dummy_key|running_total|
+----+-----+-----+---------+-------------+
|2021|   11|   50|        0|           50|
|2021|   12|   50|        0|          100|
|2022|    1|   50|        0|          150|
|2022|    2|   50|        0|          200|
|2022|   10|   50|        0|          250|
+----+-----+-----+---------+-------------+

相关问题