【问题标题】:Get Value from Map column with default使用默认值从 Map 列获取值
【发布时间】:2020-07-01 06:39:54
【问题描述】:

目前我使用df.withColumn("col", col("mapColumn").getItem("key")),但如果地图列中不存在该键,这会给我null 值。 Spark/Scala 中是否有与getOrElse("key", defaultCalue) 等效的内容?

谢谢

【问题讨论】:

    标签: scala dataframe apache-spark dictionary


    【解决方案1】:

    使用when 子句。 像

    df.withColumn("col", when(col("mapColumn").getItem("key").isNotNull,col("mapColumn").getItem("key")).otherwise(lit("DEFAULT_VALUE")))
    

    【讨论】:

      【解决方案2】:

      使用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|
      // +-----+----------------+---------+
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 2011-01-20
        • 2012-02-18
        • 2013-11-21
        • 2019-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多