Rdd的 foreach 和 foreachPartition
2017-08-03 18:59
405 查看
一.代码
二.总结
1.foreachPartition 是在每个 Partition 执行,所以 共用的资源要广播 ,广播的 资源要序列化 ,ArrayBuffer默认已经序列化
2.foreach 原来是一个假方法,压根就读不到数据
package com.xiaopeng.test import java.sql.Connection import com.xiaopeng.bi.utils.{JdbcUtil, SparkUtils} import org.apache.spark.broadcast.Broadcast import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql.{DataFrame, Row, SQLContext} import org.apache.spark.{SparkConf, SparkContext} import scala.collection.mutable.ArrayBuffer /** * Created by kequan on 3/27/17. */ object Test { def main(args: Array[String]): Unit = { //创建各种上下文 val sparkConf = new SparkConf().setAppName(this.getClass.getName.replace("$", "")); SparkUtils.setMaster(sparkConf); val sc = new SparkContext(sparkConf); val hiveContext = new HiveContext(sc); val sqlContext = new SQLContext(sc); hiveContext.sql("use yyft") val df: DataFrame = hiveContext.sql("select * from game_sdk") var rows = new ArrayBuffer[Row]() var rowsBroadCast: Broadcast[ArrayBuffer[Row]] = sc.broadcast(rows); df.rdd.foreachPartition(rdd => { val conn: Connection = JdbcUtil.getConn(); val stmt = conn.createStatement(); rdd.foreach(row => { rowsBroadCast.value.+=(row) }) }) var rows2 = new ArrayBuffer[Row]() var rowsBroadCast2: Broadcast[ArrayBuffer[Row]] = sc.broadcast(rows); df.rdd.foreach(row => { rowsBroadCast2.value.+=(row) }) for (param <- rows) { println(param.toString()) // 有数据 } println("---------------------------------") for (param <- rows2) { println(param.toString()) // 没有数据 } } } |
1.foreachPartition 是在每个 Partition 执行,所以 共用的资源要广播 ,广播的 资源要序列化 ,ArrayBuffer默认已经序列化
2.foreach 原来是一个假方法,压根就读不到数据
相关文章推荐
- 3.4 Spark RDD Action操作4-countByKey、foreach、foreachPartition、sortBy
- Spark编程之基本的RDD算子sparkContext,foreach,foreachPartition, collectAsMap
- Spark算子:RDD行动Action操作(4)–countByKey、foreach、foreachPartition、sortBy
- RDD行动Action操作(4)–countByKey、foreach、foreachPartition、sortBy
- Spark算子:RDD行动Action操作(4)–countByKey、foreach、foreachPartition、sortBy
- Spark Streaming之妙用foreachRDD和foreachPartition
- Spark算子:RDD行动Action操 4000 作(4)–countByKey、foreach、foreachPartition、sortBy
- Spark算子:RDD行动Action操作(4)–countByKey、foreach、foreachPartition、sortBy
- 【Spark】SparkStreaming-foreachrdd foreachpartition
- 【Spark Java API】Action(3)—foreach、foreachPartition、lookup
- spark源码action系列-foreach与foreachPartition
- Spark算子--foreach和foreachPartition
- spark源代码action系列-foreach与foreachPartition
- Spark算子[01]:foreach,foreachPartition
- 【Spark Java API】Action(3)—foreach、foreachPartition、lookup
- 在C++中实现foreach循环,比for_each更简洁!
- php数组的遍历讲解 for foreach list each key
- for in,for of,for each in ,forEach使用笔记
- php数组的遍历讲解 for foreach list each key
- RDD 中foreach与foreachPartition区别