Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于中间值的Pyspark数据帧过滤器_Pyspark - Fatal编程技术网

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

基于中间值的Pyspark数据帧过滤器,pyspark,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之间,比如说,输入

我有一个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,只有两个id-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 mil行所需的时间太长。我在想是否有更好的方法来缩短响应时间

[Row(id='EDFG456', score='36.2962962962963'), Row(id='LMNO1011',score='36.82352941176471')]
您可以使用该函数


它应该比
子字符串
快得多。让我知道

你好@lrnzcig,恐怕还是一样的响应时间!好啊好的,最后,你必须阅读200万行的专栏,我想这是不可避免的。。。据我所知,您无法加快速度,但是,如果您要多次这样做,可能您可以添加一个新列
floor(input\u df.score\u num)
,然后按该列重新划分数据集。重新分区本身需要相当长的时间,但之后查询应该会相当快。顺便说一下,我的答案中有一个拼写错误,我想你看到了,但我更正了它。
from pyspark.sql.functions import floor
output_matched = input_df.filter(foor(input_df.score_num) == input_score_value)
print(output_matched.take(5))