Spark学习之编程进阶——累加器与广播(5)

Spark学习之编程进阶——累加器与广播(5)

1. Spark中两种类型的共享变量:累加器(accumulator)与广播变量(broadcast variable)。累加器对信息进行聚合,而广播变量用来高效分发较大的对象。

2. 共享变量是一种可以在Spark任务中使用的特殊类型的变量。

3. 累加器的用法:

  • 通过在驱动器中调用SparkContext.accumulator(initialValue)方法,创建出存有初始值的累加器。返回值为org.apache.spark.Accumlator[T]对象,其中T是初始值initialValue的类型。
  • Spark闭包里的执行器代码可以使用累加器的+=方法(在Java中是add)增加累加器的值。
  • 驱动器程序可以调用累加器的value属性(在Java中使用value()或setValue()来访问累加器的值。 Python中实现累加空行
    file = sc.textFile(inputFile)
    #创建Accumulator[Int]并初始化为0
    blankLines = sc.accumulator(0)

    def extractCallSigns(Line):
        globle blankLines #访问全局变量
        if (line == ""):
            blankLines += 1
            return line.split("")

    callSigns = file.flatMap(extractCallSigns)
    callSigns.saveAsTextFile(outputDir + "/callsigns")
    print "Blank lines:%d" % blankLines.value

4. Spark的广播变量,它可以让程序高效地向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用。

Scala代码使用广播变量查询国家
    //查询RDD contactCounts中的呼号的对应位置。将呼号前缀
    //读取为国家代码进行查询
    val signPrefixes = sc.broadcast(loadCallSignTable())
    val countryContactCounts = contactCounts.map{case (sign,count) =>
        val country = lookupInArray(sign,signPrefixes.value)
        (country,count)
        }.reduceByKey((x,y) => x+y)
        countryContactCounts.saveAsTextFile(outputDir + "/countries.text")

5. Spark在RDD上提供pipe()方法。Spark的pipe()方法可以让我们使用任意一种语言实现Spark作业中的部分逻辑,只要它的读写Unix标准流就行。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能服务器开发

服务器开发通信协议设计介绍

由于我们的即时通讯软件的用户存在用户状态问题,即用户登录成功以后可以在他的好友列表中看到哪些好友在线,所以客户端和服务器需要保持长连接状态。另外即时通讯软件一般...

922
来自专栏Web 开发

Backbone源码研究 – Backbone.Model

都因为 IE8 不支持 Object.defineProperty,但是业务还不能脱离 IE7 和 IE8,故研究下 Backbone.Model 的实现机制,...

540
来自专栏分布式系统进阶

Librdkafka的基础数据结构 3 -- Buffer相关 1

872
来自专栏IT笔记

Hibernate合并查询结果集为实体类

用过mybatis的小伙伴可能都知道,我们可以查询两个表的部分字段合并为一个实体。然而用了Hibernate这么久了,居然还不知道也有此神器。 ? hibern...

3176
来自专栏黄Java的地盘

IndexedDB使用与出坑指南

本文通过对IndexedDB的使用方法和使用场景进行相关介绍,对常见的问题进行解答。

2401
来自专栏MasiMaro 的技术博文

OLEDB存取BLOB型数据

现代数据库系统除了支持一些标准的通用数据类型以外,大多数还支持一种称之为BLOB型的数据。 BLOB全称为big large object bytes, 大二...

983
来自专栏Albert陈凯

Spark自定义累加器的实现

Spark自定义累加器的实现 Java版本: package com.luoxuehuan.sparkproject.spark; import org.apa...

3455
来自专栏Spark生态圈

[spark] Shuffle Write解析 (Sort Based Shuffle)

从 Spark 2.0 开始移除了Hash Based Shuffle,想要了解可参考Shuffle 过程,本文将讲解 Sort Based Shuffle。

1052
来自专栏企鹅号快讯

indexedDB 基本使用

来源:党黎明 mr-dang.github.io/javascript/2017/12/09/indexedDB基本使用.html indexedDB 简介...

24010
来自专栏函数式编程语言及工具

泛函编程(14)-try to map them all

     虽然明白泛函编程风格中最重要的就是对一个管子里的元素进行操作。这个管子就是这么一个东西:F[A],我们说F是一个针对元素A的高阶类型,其实F就是一个装...

1717

扫码关注云+社区