加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

地图无法在scala中串行化?

发布时间:2020-12-16 19:03:50 所属栏目:安全 来源:网络整理
导读:我是 Scala的新人怎么来“map”功能不可序列化?如何使其可序列化?例如,如果我的代码如下所示: val data = sc.parallelize(List(1,4,3,5,2,5))def myfunc(iter: Iterator[Int]) : Iterator[Int] = { val lst = List(("a",1),("b",2),("c",3),("a",2)) var
我是 Scala的新人怎么来“map”功能不可序列化?如何使其可序列化?例如,如果我的代码如下所示:

val data = sc.parallelize(List(1,4,3,5,2,5))

def myfunc(iter: Iterator[Int]) : Iterator[Int] = {
  val lst = List(("a",1),("b",2),("c",3),("a",2))
  var res = List[Int]()
  while (iter.hasNext) {
    val cur = iter.next
    val a = lst.groupBy(x => x._1).mapValues(_.size)
    //val b= a.map(x => x._2)
    res = res ::: List(cur)
  }
  res.iterator
}

data.mapPartitions(myfunc).collect

如果我取消注释行

val b= a.map(x => x._2)

代码返回一个异常:

org.apache.spark.SparkException: Task not serializable
Caused by: java.io.NotSerializableException: scala.collection.immutable.MapLike$$anon$2
Serialization stack:
    - object not serializable (class: scala.collection.immutable.MapLike$$anon$2,value: Map(1 -> 3))
    - field (class: $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC,name: a,type: interface scala.collection.immutable.Map)

非常感谢你.

解决方法

这是众所周知的scala bug: https://issues.scala-lang.org/browse/SI-7005 Map#mapValues是不可序列化的

我们在Spark应用程序中有这个问题,map(identity)解决了问题

rdd.groupBy(_.segment).mapValues(v => ...).map(identity)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读