我有一个 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')]
答案 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
相比,它应该更快。让我知道。