Итак, я провел достаточно исследований и не нашел пост, в котором говорится о том, что я хочу сделать.
У меня есть PySpark DataFrame my_df
, который sorted
от value
column-
+----+-----+
|name|value|
+----+-----+
| A| 30|
| B| 25|
| C| 20|
| D| 18|
| E| 18|
| F| 15|
| G| 10|
+----+-----+
Сумма всех значений в столбце value
равна 136
. Я хочу получить все строки, чьи combined values >= x% of 136
. В этом примере, скажем, x=80
. Тогда target sum = 0.8*136 = 108.8
. Следовательно, новый DataFrame будет состоять из всех строк, которые имеют combined value >= 108.8
.
В нашем примере это сводится к строке D
(поскольку объединенные значения до D = 30+25+20+18 = 93
).
Тем не менее, сложная часть заключается в том, что я также хочу включить сразу следующие строки с дублирующимися значениями. В этом случае я также хочу включить строку E
, поскольку она имеет то же значение, что и строка D
, т.е. 18
.
Я хочу нарезать my_df
, указав процентную переменную x
, например, 80
, как обсуждалось выше. Новый DataFrame должен состоять из следующих строк -
+----+-----+
|name|value|
+----+-----+
| A| 30|
| B| 25|
| C| 20|
| D| 18|
| E| 18|
+----+-----+
Одна вещь, которую я мог бы здесь сделать, - это перебирать DataFrame (which is ~360k rows)
, но я предполагаю, что это побеждает цель Spark.
Есть ли краткая функция для того, что я хочу здесь?