【问题标题】:Spark dataframe value to Scala ListSpark 数据帧值到 Scala 列表
【发布时间】:2021-06-02 19:32:31
【问题描述】:

我有一个数据框,其中有一列包含数组:

+----------------------------+
|User    | Color             |
+----------------------------+
|User1   | [Green,Blue,Red]  |
|User2   | [Blue,Red]        |
+----------------------------+

我正在尝试过滤 User1 并将颜色列表放入 Scala 列表中:

val colorsList: List[String] = List("Green","Blue","Red")

这是我迄今为止尝试过的(输出添加为 cmets):

尝试 1:

val dfTest1 = myDataframe.where("User=='User1'").select("Color").rdd.map(r => r(0)).collect()
println(dfTest1)  //[Ljava.lang.Object;@44022255
for(EachColor<- dfTest1){
  println(EachColor)    //WrappedArray(Green, Blue, Red)
}

尝试 2:

val dfTest2 = myDataframe.where("User=='User1'").select("Color").collectAsList.get(0).getList(0)
println(dfTest2)  //[Green, Blue, Red]   but type is util.List[Nothing]

尝试 3:

val dfTest32 = myDataframe.where("User=='User1'").select("Color").rdd.map(r => r(0)).collect.toList 
println(dfTest32)   //List(WrappedArray(Green, Blue, Red))

for(EachColor <- dfTest32){
  println(EachColor) //WrappedArray(Green, Blue, Red)
}

尝试 4:

val dfTest31 = myDataframe.where("User=='User1'").select("Color").map(r => r.getString(0)).collect.toList    
//Exception : scala.collection.mutable.WrappedArray$ofRef cannot be cast to java.lang.String

【问题讨论】:

    标签: list scala dataframe apache-spark scala-collections


    【解决方案1】:

    您可以尝试获取Seq[String] 并转换为toList

    val colorsList = df.where("User=='User1'")
                       .select("Color")
                       .rdd.map(r => r.getAs[Seq[String]](0))
                       .collect()(0)
                       .toList
    

    或者等价

    val colorsList = df.where("User=='User1'")
                       .select("Color")
                       .collect()(0)
                       .getAs[Seq[String]](0)
                       .toList
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2017-01-24
      • 2018-04-17
      相关资源
      最近更新 更多