一步一步

机器学习 机器视觉

MapPartition一次oom问题解决

1、问题:每次跑到MapParititon就会停住
这里写图片描述
看起来是repartition的问题,实际出问题的是之前的mapPartition
executor表现:
这里写图片描述
出问题的代码:

val process_data = data.mapPartitions(
           rs => {
            val delLabelMapbc = delLabelMap.value
            var res = List[String]()
            for (r <- rs) {
              val line = r.split("\t")
                val checkDelKey = line(1) + '-' + line(6) + '-' + line(5)
                if (delLabelMapbc.contains(checkDelKey)) {
                  val rep = r.replaceFirst("[0-9]","-1")
                  res = rep :: res
                } else { res = r :: res}
            }
            res.iterator
          } )

这里res对象会把一整个partition拿进内存,所以会OOM;
然后请教的大牛说driverOOM原因就两点,stage过多,或者你自己定义的大数据结构,感觉可以记住。
2、改进
换成map

val process_data = data.map(
            r => {
                val delLabelMapbc = delLabelMap.value
                val seg = r.split("\t")
                val checkDelKey = seg(1) + '-' + seg(6) + '-' + seg(5)
                var rep = r
                if (delLabelMapbc.contains(checkDelKey)) {
                    rep = r.replaceFirst("[0-9]","-1")
                }
                rep
            }
        )

就可以正常运行了

阅读更多
个人分类: spark
上一篇groupByKey一直OOM处理
下一篇关于spark一些参数的问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭