scala - RDD 的 foreachPartition 方法内的意外行为

标签 scala apache-spark rdd

我通过 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 在第一次映射后变空了?

最佳答案

它对我来说并不奇怪,因为 pIterator,当你用 map 遍历它时,它没有更多的值,并考虑到 lengthsize 的快捷方式,它是这样实现的:

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

你得到 0。

关于scala - RDD 的 foreachPartition 方法内的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36884322/

相关文章:

apache-spark - 推断 Pyspark 架构

apache-spark - 使用 Spark 将 RDD 写入 S3 时设置 S3 对象元数据(标签)

performance - 在编辑器中输入时 Intellij IDEA 非常慢(仅限 Scala)

scala - 使用依赖方法类型和类型投影时的类型等价问题

scala - 一般重写 Scala 案例类

scala - Scala中的匿名子类

scala - 如何从字符串列中提取数字?

r - 如何将变量传递给spark_apply()中调用的函数?

apache-spark - Spark : unpersist rdd before remove it from List

java - Apache Spark : In PairFlatMapFunction, 如何将元组添加回 Iterable<Tuple2<Integer, String>> 返回类型