首页 > 解决方案 > 基于值之间的Pyspark数据框过滤器

问题描述

我有一个具有以下值的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,然后我想要只有两个 id的输出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')]

标签: pyspark

解决方案


您可以使用功能

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. 让我知道。


推荐阅读