Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray

code

      val linkPairSum = F.udf(
        (list:List[Map[Long,Int]]) => {
          var map = Map[Long,Int]()
          for(m <- list){
            if(m != null){
              println("----")
              println(m)
              map = map ++ m.map(t => t._1 -> (t._2 + map.getOrElse(t._1, 0)))
              println("====")
              println(map)
            }
        }
          map
        }
      )


      val sum = all.groupBy("window", "mapVersion", "linkId")
        .agg(F.sum("passthrough").alias("passthrough"),F.sum("resident").alias("resident"),F.first("driverId").alias("driverId"),
          linkPairSum(F.collect_list("inLink")).alias("inLink"),linkPairSum(F.collect_list("outLink")).alias("outLink")
        ).as[PassThroughFeature]

报错

Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [Lscala.collection.immutable.Map;

原因

So it looks like the ArrayType on Dataframe "idDF" is really a WrappedArray and not an Array - So the function call to "filterMapKeysWithSet" failed as it expected an Array but got a WrappedArray/ Seq instead (which doesn't implicitly convert to Array in Scala 2.8 and above).

修改

      val linkPairSum = F.udf(
        (list:List[Map[Long,Int]]) => {
          var map = Map[Long,Int]()
          for(m <- list){
            if(m != null){
              println("----")
              println(m)
              map = map ++ m.map(t => t._1 -> (t._2 + map.getOrElse(t._1, 0)))
              println("====")
              println(map)
            }
        }
          map
        }
      )

修改为:
      val linkPairSum = F.udf(
        (list:Seq[Map[Long,Int]]) => {
          var map = Map[Long,Int]()
          for(m <- list){
            if(m != null){
              println("----")
              println(m)
              map = map ++ m.map(t => t._1 -> (t._2 + map.getOrElse(t._1, 0)))
              println("====")
              println(map)
            }
        }
          map
        }
      )

 

转载于:https://my.oschina.net/u/2000675/blog/3074958

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值