代码之家  ›  专栏  ›  技术社区  ›  Justin Pihony

使用地图创建新列

  •  2
  • Justin Pihony  · 技术社区  · 9 年前

    是否有一种方法(不使用UDF)来获取现有数据帧并通过获取现有列并从映射中提取其等效值来创建新列?

    df.withColumn("newCol", transform(col("existing").using(map)))
    

    哪里 map 的密钥类型与 existing ,值是我想要的输出。

    2 回复  |  直到 9 年前
        1
  •  2
  •   zero323 little_kid_pea    9 年前

    您可以转换 Map DataFrame join :

    val df = sc.parallelize(Seq(
        (1, "foo"), (2, "bar"), (3, "foobar")
    )).toDF("id", "existing")
    
    val map = Map("foo" -> 1, "bar" -> 2)
    val lookup = sc.parallelize(map.toSeq).toDF("key", "value")
    
    df
     .join(lookup, $"existing" <=> $"key", "left")
     .drop("key")
     .withColumnRenamed("value", "newCol")
    
        2
  •  0
  •   zero323 little_kid_pea    9 年前
    import sqtx.implicits._
    val x = Map("foo" -> 1,"bar"-> 2, "baz"->3)
    
    val df = sc.parallelize(Seq(
      (1, "foo"), (2, "bar"), (3, "foobar")
    )).toDF("id", "existing")
    df.map(r => (r.getInt(0),x.getOrElse(r.getString(1),0))).toDF("id","new")