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 之间,例如,输入分值为 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')]
解决方案
您可以使用功能楼。
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
. 让我知道。
推荐阅读
- python - Raspbian 在睡眠时检测键盘输入
- javascript - 使用 innerHTML 嵌套时的 DOM 待办事项列表
- html - 在背景图像上添加叠加层后的水平滚动条
- ios - 有没有办法在 Swift 中将当前迭代计数作为 Int 访问?
- javascript - CORS 请求未发送 cookie
- javascript - Javascript - 未捕获的 SyntaxError:意外标记“其他”
- firebase - 如何在 React Native Firebase 的 Firebase 身份验证中避免重新验证
- amazon-web-services - Lambda@Edge URL 使用 NodeJS 重定向到 s3 SignedUrl
- spring - 在spring boot security中的会话超时后,我如何重定向到不同的jsp页面(而不是重定向到登录页面)
- python - 为什么最终字典不能用作 TypedDict 中的文字?