基于中间值的Pyspark数据框过滤器

时间:2020-02-10 07:39:16

标签: 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 中的得分在输入得分值和输入得分值之间为 的值,例如,输入得分值为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))

上面的代码给出以下输出,但是处理200万行的时间太长。我在想是否有更好的方法可以减少响应时间。

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

1 个答案:

答案 0 :(得分:1)

您可以使用函数floor

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相比,它应该更快。让我知道。