missing arguments for method toArray in trait Collection

项目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])

再编译,就没有问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值