如果您只有 3 个键,则通过获取要保留的 2 个键来创建新地图很简单:
val dsNew = ds.withColumn(
"userInfo",
map(lit("name"), $"userInfo"("name"), lit("age"), $"userInfo"("age"))
)
dsNew.show
//+------------------------+
//|userInfo |
//+------------------------+
//|[name -> Tom, age -> 52]|
//+------------------------+
地图过滤仅在另一个答案中指出的 spark 版本 3 之后才可用。在 spark 2.4 中,您可以获取键并使用数组函数对其进行过滤,然后使用 map_from_arrays 函数使用过滤后的键创建新映射:
val dsNew = ds.withColumn(
"filtered_keys",
expr("filter(map_keys(userInfo), x -> x <> 'phone')")
).withColumn(
"userInfo",
map_from_arrays(
$"filtered_keys",
expr("transform(filtered_keys, x -> userInfo[x])")
)
).drop("filtered_keys")