如何在Spark中将选定的列转换为Map?

时间:2018-12-18 19:57:43

标签: scala apache-spark

这是一个非常具体的问题
我有一个表,我选择了一个“字符串”列和两个“时间戳记”列,并将它们收集到具有List [(String,Timestamp,Timestamp)]格式的列表中,我想将其转换为具有Map [String]格式的Map ,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)
  }
}

有人知道这样做的最好方法是什么?谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您可以使用断点来查找代码在out.put(value(0), array).处的工作方式

答案 1 :(得分:0)

您可以使用以下代码: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))