【问题标题】:How to transform selected columns to Map in spark?如何将选定的列转换为火花中的地图?
【发布时间】:2018-12-19 17:12:52
【问题描述】:

这是一个非常具体的问题
我有一张表,我选择了一个字符串列和两个时间戳列,并将它们收集到一个列表中,格式为 List[(String,Timestamp,Timestamp)],我想将其转换为格式为 Map[String , ArrayList(Timestamp, Timestamp)] 因为一个字符串可以有多个对应的 Timestamp 值。但我不知道如何在 Spark/Scala 中传输它,我尝试了以下代码,但不起作用:

def listToMap(input:List[(String,Timestamp,Timestamp)]) :util.HashMap[String,util.ArrayList[Timestamp,Timestamp]]= {
var out = new util.HashMap[String,util.ArrayList[Timestamp,Timestamp]]()
for (value<-input) {
  val array=new util.ArrayList[Timestamp,Timestamp](value(1),value(2))
  out.put(value(0),array)
  }
}

有谁知道最好的方法是什么?谢谢!

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    我认为你可以使用断点来找出你的代码在out.put(value(0), array).的位置是如何工作的

    【讨论】:

      【解决方案2】:

      您可以使用以下代码:ArrayBuffer 相当于 Scala 中的 ArrayList。

      import scala.collection.mutable.ArrayBuffer
      val lst = List(("Test1","Timestamp1","Timestamp2"),("Test2","Timestamp3","Timestamp4"))
      println(lst.map(x=>x._1 ->ArrayBuffer(x._2,x._3)).toMap)
      

      输出:

      Map(Test1 -> ArrayBuffer(Timestamp1, Timestamp2), Test2 -> ArrayBuffer(Timestamp3, Timestamp4))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        • 2020-05-15
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 2020-07-16
        相关资源
        最近更新 更多