首页 > 解决方案 > 基于列值数据和应用条件的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|
+----------------+--------+---

我想获得输出添加满足两个条件的结果的输出

最终输出应该是这样的

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

标签: pythonpysparkapache-spark-sqlpyspark-dataframes

解决方案


基本上在这里您需要复合条件,计数取决于具有 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()

推荐阅读