我在 Spark 数据框中有以下数据集。我需要根据给定的条件进行过滤:
ID: (6, 7, 8, 9, 13, 15, 16, 18)
STATE :(Illinois, Oklahoma)
, CITY: (Orange, Boca_Raton)
我需要遍历这些列以将过滤器值作为键值对而不是对值进行硬编码并过滤数据帧以获得结果 df。
id | 姓名 | 城市 | 状态 |
---|---|---|---|
1 | 罗森 | 里士满 | 弗吉尼亚 |
3 | 詹姆森 | 劳德代尔堡 | 佛罗里达 |
4 | 马琳 | 华盛顿 | 哥伦比亚特区 |
5 | 象牙色 | 梅肯 | 格鲁吉亚 |
6 | 托比 | San_Diego | 加利福尼亚 |
7 | 伊萨科 | 檀香山 | 伊利诺伊州 |
8 | 萨利 | 橙色 | 加利福尼亚 |
9 | 兰妮 | 皮奥里亚 | 俄克拉荷马州 |
10 | 布拉德利 | 塔尔萨 | 俄克拉荷马州 |
11 | 特奥多拉 | 匹兹堡 | 宾夕法尼亚 |
12 | 本尼迪克塔 | 坦帕 | 佛罗里达 |
13 | 塞尔玛 | Newport_News | 加利福尼亚 |
14 | 卡琳 | 燧石 | 密歇根 |
15 | 乔伊 | Boca_Raton | 加利福尼亚 |
16 | 帕蒂 | 波士顿 | 马萨诸塞州 |
17 | 达格 | 俾斯麦 | 北达科他州 |
18 | 格林 | 迪凯特 | 俄克拉荷马州 |
19 | 希尔顿 | 凤凰 | 亚利桑那州 |
20 | 巴贝特 | 新奥尔良 | 路易斯安那州 |
答案 0 :(得分:0)
您可以将 isin
函数与值列表一起使用。像这样:
val listIDs = Seq(6, 7, 8, 9, 13, 15, 16, 18)
val listStates = Seq("Illinois", "Oklahoma")
val listCityes = Seq("Orange", "Boca_Raton")
val conditionExpr = Seq(
col("id").isin(listIDs: _*),
!col("STATE").isin(listStates: _*),
!col("CITY").isin(listCityes: _*)
).reduce(_ and _)
val df1 = df.filter(conditionExpr)
df1.show
//+---+------+------------+-------------+
//| id| NAME| CITY| STATE|
//+---+------+------------+-------------+
//| 6| Toby| San_Diego| California|
//| 13| Zelma|Newport_News| California|
//| 16|Pattie| Boston|Massachusetts|
//+---+------+------------+-------------+