val spark: SparkSession = SparkSession.builder().master("local").getOrCreate()
val sc: SparkContext = spark.sparkContext
val rdd: RDD[Int] = sc.parallelize(Array(1, 1, 2, 3))
rdd.foreach((x: Int) =>{
println(x)
})
val spark: SparkSession = SparkSession.builder().master("local").getOrCreate()
val sc: SparkContext = spark.sparkContext
val rdd: RDD[Int] = sc.parallelize(Array(1, 1, 2, 3))
//foreachPartition作用于每一个时间间隔的RDD中的每一个partition,
//foreach作用于每一个时间间隔的RDD中的每一个元素。
//如果有连接数据库的操作,要用foreachPartition,每个分区连接一次,减少开销
rdd.foreachPartition((x: Iterator[Int]) =>{
x.foreach(println)
})
总结
foreach
与foreachPartition
的区别可类比map
与mapPartitions
的区别- 二者都是行动算子
参考
java - Apache Spark - foreach Vs foreachPartitions When to use What? - Stack Overflow