项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
spark 任务中有如下一段代码:
.combineByKey((v: String) => {
val map = new util.TreeMap[String, String]()
val (timestamp, phone) = (v.split("\t")(1), v.split("\t")(0))
map.put(timestamp, phone)
map
},
(x: util.TreeMap[String, String], v: String) => {
val (timestamp, phone) = (v.split("\t")(1), v.split("\t")(0))
if(x.size() < 20) { x.put(timestamp, phone) }
x
},
(x: util.TreeMap[String, String], y: util.TreeMap[String, String]) => {
if(x.size() < 20) { x.putAll(y) }
x
}
)
.map(x => {
val (imeimd5, phones) = (x._1, x._2.values.toArray[String])
val arrayBuffer = ArrayBuffer[String]()
...
})
编译的时候,会提示如下错误:
error: missing arguments for method toArray in trait Collection;
[INFO] follow this method with `_' if you want to treat it as a partially applied function
[INFO] val (imeimd5, phones) = (x._1, x._2.values.toArray[String])
分析了一下,造成以上错误的主要原因如下:
TreeMap.values
得到的是一个Collection。而Collection接口中,自己定义有toArray的方法,方法签名为Object[] toArray();
。这个时候,调用的就是他自己的toArray方法,返回的类型为Object[]
,并不是我们需要的类型。此时,我们只需要做一个简单的改变即可:
val (imeimd5, phones) = (x._1, x._2.values.asScala.toArray[String])
再编译,就没有问题!