У меня есть 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')]