如果值满足 Spark SQL(版本 <= 2.4)中的条件,我如何 return 键列表?)

How can I return a list of Keys if the Values meet a condition in Spark SQL (version <= 2.4)?)

在 Spark SQL(版本 <=2.4)中,我有一个包含 Map 的列,如下所示:

{"'12'": "False", "'18'": "False", "'9'": "True", "'586'": "True", "'4345'": "False", "'564'": "True", "'555'": "True", "'1'": "False"}

我只想 return 带有 Value = "True" 的键。例如我想return: [9, 586, 564, 555].

由于查询生成过程中的问题,我希望尽可能避免大量的字符串操作。

###正在更新 Spark 中的答案-SQL:

select 
  collect_list(keys)
from (
  select
    keys
  from my_table
  lateral view explode(my_column_with_map) f as keys, values
  where values="True"
 ) 

一种方法是在地图上使用爆炸,删除 False 值,然后使用 group bycollect_list 形成您想要的数组。

在scala中可以这样写:

// generating data
val m = Map(12 -> false, 18 -> false, 9 -> true, 586 -> true, 4345 -> false,
            564 -> true, 555 -> true, 1 -> false)
val df = Seq(0, m).toDF("id", "my_map")

// and filtering out the false values
df.select('id, explode('my_map))
  .where('value) // or where('value === "True") if you deal with strings
  .groupBy('id)
  .agg(collect_list('key) as "my_seq")
  .show(false)

产生:

+---+------------------+
|id |my_seq            |
+---+------------------+
|0  |[555, 9, 586, 564]|
+---+------------------+