基于列值数据和应用条件的 Pyspark 过滤
Pyspark filtering based on column value data and applying condition
我有一个这种格式的 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
- else 对于任何其他“设备”类型如果“计数”> 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)
假设 df
是您的数据框:
from pyspark.sql import functions as F
df.where(
"""
Device = 'Samsung' and Count > 10
or Device <> 'Samsung' and count > 8
"""
).show()
基本上这里你需要复合条件,计数取决于具有 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()
我有一个这种格式的 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
- else 对于任何其他“设备”类型如果“计数”> 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)
假设 df
是您的数据框:
from pyspark.sql import functions as F
df.where(
"""
Device = 'Samsung' and Count > 10
or Device <> 'Samsung' and count > 8
"""
).show()
基本上这里你需要复合条件,计数取决于具有 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()