这是我的输入数据框:
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的初学者,请帮助我解决此问题
答案 0 :(得分:1)
您可以首先使用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|
+---+---+