【问题标题】:how to access values from a array column in scala dataframe如何从scala数据框中的数组列访问值
【发布时间】:2020-03-12 23:54:23
【问题描述】:

我有一个带有 scala 元组数组(索引,值)的数据框,如下所示,索引的值从 1 到 4

id  | units_flag_tuples

id1 | [(3,2.0), (4,6.0)]

id2 | [(1,10.0), (2,2.0), (3,5.0)]

我想访问数组中的值并根据索引(unit1,unit2,unit3,unit4)将其放入列中:

ID | unit1| unit2 | unit3 | unit 4

id1 | null | null  | 2.0   | 6.0

id2 | 10.0 | 2.0   | 5.0   | null

代码如下:

df
.withColumn("unit1", col("units_flag_tuples").find(_._1 == '1').get._2  )
.withColumn("unit2", col("units_flag_tuples").find(_._1 == '2').get._2  )
.withColumn("unit3", col("units_flag_tuples").find(_._1 == '3').get._2  )
.withColumn("unit4", col("units_flag_tuples").find(_._1 == '4').get._2  )

这是我收到的错误消息:

错误:值查找不是 org.apache.spark.sql.Column 的成员

如何解决此错误或任何更好的方法?

【问题讨论】:

    标签: scala dataframe tuples


    【解决方案1】:

    这是我的不同方法,我使用map_from_entries 函数为数组制作映射,并通过从映射中选择键来获取每一列。

    val df = Seq(("id1", Seq((3,2.0), (4,6.0))), ("id2", Seq((1,10.0), (2,2.0), (3,5.0)))).toDF("id", "units_flag_tuples")
    df.show(false)
    
    df.withColumn("map", map_from_entries(col("units_flag_tuples")))
      .withColumn("unit1", col("map.1"))
      .withColumn("unit2", col("map.2"))
      .withColumn("unit3", col("map.3"))
      .withColumn("unit4", col("map.4"))
      .drop("map", "units_flag_tuples").show
    

    结果是:

    +---+-----+-----+-----+-----+
    | id|unit1|unit2|unit3|unit4|
    +---+-----+-----+-----+-----+
    |id1| null| null|  2.0|  6.0|
    |id2| 10.0|  2.0|  5.0| null|
    +---+-----+-----+-----+-----+
    

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 2019-02-06
      • 1970-01-01
      • 2018-05-15
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多