pyspark - Pyspark:在groupBy之后删除列条件上的行
问题描述
这是我的输入数据框:
id val
1 Y
1 N
2 a
2 b
3 N
结果应该是:
id val
1 Y
2 a
2 b
3 N
我想在 val 中同时包含 Y 和 N 的 col id 上进行分组,然后删除列 val 包含“N”的行。请帮我解决这个问题,因为我是 pyspark 的初学者
解决方案
您可以首先使用过滤器识别有问题的行,val=="Y"
然后将此数据框连接回原始数据框。最后,您可以过滤Null
值和要保留的行,例如val==Y
. 即使有很多行,Pyspark 也应该能够处理自联接。示例如下所示:
df_new = spark.createDataFrame([
(1, "Y"), (1, "N"), (1,"X"), (1,"Z"),
(2,"a"), (2,"b"), (3,"N")
], ("id", "val"))
df_Y = df_new.filter(col("val")=="Y").withColumnRenamed("val","val_Y").withColumnRenamed("id","id_Y")
df_new = df_new.join(df_Y, df_new["id"]==df_Y["id_Y"],how="left")
df_new.filter((col("val_Y").isNull()) | ((col("val_Y")=="Y") & ~(col("val")=="N"))).select("id","val").show()
结果将是您的首选:
+---+---+
| id|val|
+---+---+
| 1| X|
| 1| Y|
| 1| Z|
| 3| N|
| 2| a|
| 2| b|
+---+---+
推荐阅读
- javascript - 如何在 cPanel 服务器上使用 React 设置 SSL 证书?
- c++ - 问题一:调用函数的执行时间
- excel - VBA Excel 错误“对象变量或未设置块变量”运行时错误 91 和 438
- azure - Azure APIM - 单个请求中的多个 API 调用(发送请求或替代方法)
- mysql - mysql case语句的别名
- ember.js - 如何在 highcharts 中刷新数据和/或重绘图表?
- android - 当我将 ItemTouchHelper 附加到主 Recycler 时,试图让我的嵌套 recyclerView 可滚动
- javascript - Vuejs 使用 v-model 指令输入输入会以某种方式删除 CSS 类
- python - 在 tkinter 中,当我运行搜索并将结果显示为新标签时,如何从一个函数中删除标签?
- mysql - MySQL - 从其他表插入行时,操作数应包含 1 列