Фильтр данных Pyspark на основе промежуточных значений - PullRequest
1 голос
/ 10 февраля 2020

У меня есть Pyspark фрейм данных со значениями ниже -

[Row(id='ABCD123',  score='28.095238095238095'), Row(id='EDFG456', score='36.2962962962963'), Row(id='HIJK789', score='37.56218905472637'), Row(id='LMNO1011', score='36.82352941176471')]

Я хочу только значения из DF , которые имеют оценку между значение оценки входа и значение оценки входа + 1, скажем, значение оценки ввода равно 36, тогда я хочу вывод DF только с двумя идентификаторами - EDFG456 & LMNO1011 , так как их оценка падает между 36 и 37. Я добился этого, выполнив следующее:

input_score_value = 36
input_df = my_df.withColumn("score_num", substring(my_df.score, 1,2))
output_matched = input_df.filter(input_df.score_num == input_score_value)
print(output_matched.take(5))

Приведенный выше код дает приведенный ниже вывод, но обработка 2 мил строк занимает слишком много времени. Я думал, есть ли лучший способ сделать это, чтобы уменьшить время отклика.

[Row(id='EDFG456', score='36.2962962962963'), Row(id='LMNO1011',score='36.82352941176471')]

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать функцию этаж .

from pyspark.sql.functions import floor
output_matched = input_df.filter(foor(input_df.score_num) == input_score_value)
print(output_matched.take(5))

Это должно быть намного быстрее по сравнению с substring. Дай мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...