gpt4 book ai didi

python - Pyspark - 根据一行中的条件过滤掉多行

转载 作者:行者123 更新时间:2023-12-05 09:08:48 25 4
gpt4 key购买 nike

我有一个这样的表:

--------------------------------------------
| Id | Value | Some Other Columns Here
| 0 | 5 |
| 0 | 4 |
| 0 | 0 |
| 1 | 3 |
| 2 | 1 |
| 2 | 8 |
| 3 | -4 |
--------------------------------------------

我想删除所有值 <= 0 的 ID,因此结果将是:

--------------------------------------------
| Id | Value | Some Other Columns Here
| 1 | 3 |
| 2 | 1 |
| 2 | 8 |
--------------------------------------------

我尝试通过仅过滤到值 <=0 的行来执行此操作,从中选择不同的 ID,将其转换为列表,然后使用 df.filter(~df.Id.isin(mylist)) <删除原始表中在该列表中具有 ID 的所有行

但是,我有大量的数据,并且在列表中耗尽了内存,所以我需要想出一个纯粹的 pyspark 解决方案。

最佳答案

正如 Gordon 提到的,您可能需要一个窗口,这是一个 pyspark 版本:

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

w = Window.partitionBy("Id")
(df.withColumn("flag",F.when(F.col("Value")<=0,0).otherwise(1))
.withColumn("Min",F.min("flag").over(w)).filter(F.col("Min")!=0)
.drop("flag","Min")).show()

+---+-----+
| Id|Value|
+---+-----+
| 1| 3|
| 2| 1|
| 2| 8|
+---+-----+

所采取方法的简要总结:

  • Value<=0 时设置标志然后 0否则`1
  • 获取 id 分区的最小值(如果任何前一个条件是,将返回 0遇见)
  • 仅在这 Min 时过滤值不为 0

`

关于python - Pyspark - 根据一行中的条件过滤掉多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63019282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com