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

scala – RDD的foreachPartition方法中的意外行为

发布时间:2020-12-16 10:05:26 所属栏目:安全 来源:网络整理
导读:我通过spark- shell评估了以下 scala代码行: val a = sc.parallelize(Array(1,2,3,4,5,6,7,8,9,10))val b = a.coalesce(1)b.foreachPartition { p = p.map(_ + 1).foreach(println) p.map(_ * 2).foreach(println)} 输出如下: 234567891011 为什么第一张地
我通过spark- shell评估了以下 scala代码行:

val a = sc.parallelize(Array(1,2,3,4,5,6,7,8,9,10))
val b = a.coalesce(1)
b.foreachPartition { p => 
  p.map(_ + 1).foreach(println)
  p.map(_ * 2).foreach(println)
}

输出如下:

2
3
4
5
6
7
8
9
10
11

为什么第一张地图后分区p变空了?

解决方法

它对我来说并不奇怪,因为p是Iterator,当你用map浏览它时,它没有更多的值,并考虑到长度是大小的快捷方式,它实现如下:

def size: Int = {
  var result = 0
  for (x <- self) result += 1
  result
}

你得到0.

(编辑:李大同)

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

    推荐文章
      热点阅读