Pyspark: удалить строки в условии столбца после groupBy - PullRequest
0 голосов
/ 06 сентября 2018

Это мой входной фрейм данных:

id val    
1  Y
1  N
2  a
2  b
3  N

Результат должен быть:

id val    
1  Y     
2  a    
2  b
3  N

Я хочу сгруппировать по col id, который имеет оба значения Y и N в val, а затем удалить строку, в которой столбец val содержит "N". Пожалуйста, помогите мне решить эту проблему, так как я новичок в pyspark

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете сначала идентифицировать проблемные строки с помощью фильтра для 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|
+---+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...