【发布时间】:2020-07-01 06:39:54
【问题描述】:
目前我使用df.withColumn("col", col("mapColumn").getItem("key")),但如果地图列中不存在该键,这会给我null 值。 Spark/Scala 中是否有与getOrElse("key", defaultCalue) 等效的内容?
谢谢
【问题讨论】:
标签: scala dataframe apache-spark dictionary
目前我使用df.withColumn("col", col("mapColumn").getItem("key")),但如果地图列中不存在该键,这会给我null 值。 Spark/Scala 中是否有与getOrElse("key", defaultCalue) 等效的内容?
谢谢
【问题讨论】:
标签: scala dataframe apache-spark dictionary
使用when 子句。
像
df.withColumn("col", when(col("mapColumn").getItem("key").isNotNull,col("mapColumn").getItem("key")).otherwise(lit("DEFAULT_VALUE")))
【讨论】:
使用coalesce,如下图:
val df = Seq(
(10, Map(1 -> "a", 2 -> "b")),
(20, Map(3 -> "c"))
).toDF("idCol", "mapCol")
df.withColumn("mapValOf1", coalesce($"mapCol"(1), lit("unknown"))).show
// +-----+----------------+---------+
// |idCol| mapCol|mapValOf1|
// +-----+----------------+---------+
// | 10|[1 -> a, 2 -> b]| a|
// | 20| [3 -> c]| unknown|
// +-----+----------------+---------+
【讨论】: