python - 基于列值数据和应用条件的Pyspark过滤
问题描述
我有一个这种格式的 pyspark 数据框。
out.show(5)
+----------------+--------+--
|ip_address| Device | Count |
+----------------+--------+--
|2.3.4.5 | Apple | 6 |
|1.2.3.4 | Samsung | 18|
|6.6.6.6 | MI | 8 |
|4.4.4.4 | Samsung| 12|
|8.8.8.8 | Apple | 16|
|9.9.9.9 | Samsung| 8|
+----------------+--------+---
我想获得输出添加满足两个条件的结果的输出
- 对于“设备”作为“三星”,“计数”>10
- 如果“计数”> 8,则其他任何“设备”类型
最终输出应该是这样的
+----------------+--------+--
|ip_address| Device | Count |
+----------------+--------+--
|1.2.3.4 | Samsung| 18 |
|4.4.4.4 | Samsung| 12 |
|8.8.8.8 | Apple | 16 |
所以我能想到的一种方法是过滤掉设备类型并应用条件,但我想知道我们是否可以使用 if else 然后连接两个条件输出
frSamsung = out.filter(out["Device"].rlike("Samsung"))
fpr=frSamsung.filter(frSamsung.Count > 10)
解决方案
基本上在这里您需要复合条件,计数取决于具有 2 个不同条件的设备类型 -
from pyspark.sql import functions as F
df.where((
((F.col("device") == 'Samsung') & (F.col("count") > 10 )) |
((F.col("device") != 'Samsung') & (F.col("count") > 8 ))
)).show()
推荐阅读
- git - Gitlab CI:获取自上次运行以来更改的文件列表
- django - 使用 rest_framework_simplejwt 沿边令牌返回用户对象
- flutter - 颤动中的导航
- powerbi - Power BI - 疑点
- flutter - Flutter 2 MaterialApp buttonTheme for ElevatedButton
- javascript - 如何使用 Barba 删除 URL 中的扩展名
- arrays - 检查数组是否为空或包含值,打字稿
- php - 您的要求无法解析为一组可安装的软件包(Laravel 安装程序 4.2.7)
- json - 无法对值进行 JSON 解码:额外数据:第 1 行第 13 列(字符 12)(pavlovia)
- javascript - 如何在页面加载前显示动画?