Все еще новичок в Spark, и я пытаюсь сделать это окончательное преобразование максимально чистым и эффективным.
Скажем, у меня есть кадр данных, который выглядит следующим образом
+------+--------+
|ID | Hit |
+------+--------+
|123 | 0 |
|456 | 1 |
|789 | 0 |
|123 | 1 |
|123 | 0 |
|789 | 1 |
|1234 | 0 |
| 1234 | 0 |
+------+--------+
Iя пытаюсь получить новый фрейм данных (или два, в зависимости от того, что более эффективно), где, если строка имеет «1» в «попадании», она не может иметь строку с «0» в попадании, а если есть, то «0»было бы до определенного уровня, основанного на столбце ID.
Вот один из методов, которые я пробовал, но я не уверен, что это 1. Самый эффективный из возможных способов 2. Самый чистый возможный способ
dfhits = df.filter(df.Hit == 1)
dfnonhits = df.filter(df.Hit == 0)
dfnonhitsdistinct = dfnonhits.filter(~dfnonhits['ID'].isin(dfhits))
Конечный набор данных будет выглядеть следующим образом:
+------+--------+
|ID | Hit |
+------+--------+
|456 | 1 |
|123 | 1 |
|789 | 1 |
|1234 | 0 |
+------+--------+