如果值满足 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 by
和 collect_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]|
+---+------------------+
在 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 by
和 collect_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]|
+---+------------------+