基于列值数据和应用条件的 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|
+----------------+--------+---

我想得到输出加上满足两个条件的结果

最终输出应该是这样的

+----------------+--------+--
|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()