Spark Accumulator的正确使用方式
来源:互联网 发布:淘宝店铺添加客服链接 编辑:程序博客网 时间:2024/04/30 09:21
Spark1.6中的
public static void main(String[] args) {
SparkConf conf = new SparkConf().setMaster("local[3]")
.setAppName("CoalesceTest");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc.sc());
List<String> grades = Arrays.asList("85", "90", "60", null);
List<Tuple2<String, Integer>> nameAndGrades = Arrays.asList(new Tuple2<String, Integer>("jack",88),new Tuple2<String, Integer>("lucy",90), new Tuple2<String, Integer>("marry",66), new Tuple2<String, Integer>(null,0));
JavaPairRDD<String, Integer> parallelizePairs = sc.parallelizePairs(nameAndGrades,3);
List<Partition> partitions = parallelizePairs.partitions();
final Accumulator<Integer> accumulator = sc.accumulator(0);
final Accumulator<Integer> accumulatorB = sc.accumulator(0);
final Broadcast<Accumulator<Integer>> broadcast = sc.broadcast(accumulator);
parallelizePairs.foreach(new VoidFunction<Tuple2<String,Integer>>() {
private static final long serialVersionUID = 1L;
@Override
public void call(Tuple2<String, Integer> t) throws Exception {
System.out.println("foreach-------"+t._1 + "---" +t._2 );
//此处进行的累加是无效的,只能够进行Accumulator的累加操作才行
Accumulator<Integer> value = broadcast.value();
//value.add(1); 同一个accumulator进行两次累加只取得当前的broadcast accumulator的值
accumulator.add(1);
accumulatorB.add(1);
//采用broadcast方式可以正确的获取accumulator 的 initValue 以及localValue
//System.out.println("-------accumulator init value is " + value.initialValue());
//initValue 获取不到
//System.out.println("-------accumulatorB init value is " + accumulatorB.initialValue());
//不能获得正确的累加值
//System.out.println("foreach----------count is " + count ++ );
System.out.println("----accumulator localValue is " + value.localValue());
//System.out.println("----accumulatorB localValue is " + accumulatorB.localValue());
}
});
// accumulator 只能够在driver中获取值,
//Create an [[org.apache.spark.Accumulator]] variable of a given type, which tasks can “add”
// values to using the add method. Only the master can access the accumulator’s value.
// 在集群上运行的任务可以通过add或者”+=”方法在累加器上进行累加操作。但是,它们不能读取它的值。只有驱动程序能够读取它的值,通过累加器的value方法
System.out.println("----accumulator localValue is " + accumulator.localValue() + " accumulatorB.value : " +accumulatorB.value());
}
0 0
- Spark Accumulator的正确使用方式
- spark-broadcast&accumulator使用
- 【Spark Java API】broadcast、accumulator
- 【Spark Java API】broadcast、accumulator
- Spark Streaming Accumulator 并发问题
- Spark(Accumulator)陷阱及解决办法
- volley的正确使用方式
- eclipse的正确使用方式
- Fragment的正确使用方式
- Xshell的正确使用方式
- 动手实战联合使用Spark Streaming、Broadcast、Accumulator计数器实现在线黑名单过滤和计数
- Spark累加器(Accumulator)陷阱及解决办法
- spark中的Broadcast variables和Accumulator
- Spark累加器(Accumulator)陷阱及解决办法
- Spark累加器(Accumulator)陷阱及解决办法
- spark自定义Accumulator高级应用(JAVA)
- Spark累加器(Accumulator)陷阱及解决办法
- PHP引号的正确使用方式介绍
- 第七周项目4 -队列数组
- 搬水果
- 回文检查
- 两层for循环使用之 打印任意行数的菱形图像
- CVPR 2016-10-4
- Spark Accumulator的正确使用方式
- 栈和队列
- Linux下面删除指定目录下非指定文件的所有文件
- 第五周项目三 括号的匹配
- NGUI支持中文
- 浅谈C/C++的浮点数在内存中的存储方式
- 顺序表应用6:有序顺序表查询
- 非线性数据结构
- Linux下的目录及其操作命令(三、改变工作目录和显示目录内容的命令)