ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spark中的共享变量

2021-11-12 20:04:09  阅读:88  来源: 互联网

标签:String val apache sc import Spark spark 共享 变量


Spark中术语解释

Application:基于Spark的应用程序,包含了driver程序和 集群上的executor

DriverProgram:运行main函数并且新建SparkContext的程序

ClusterManager:在集群上获取资源的外部服务(例如 standalone,Mesos,Yarn )

WorkerNode:集群中任何可以运行应用用代码的节点

Executor:是在一个workernode上为某应用用启动的一个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上。每个应用用都有各自自独立的executors

Task:被送到某个executor上的执行单元

累加器

在Driver端定义:sc.longAccumulator
在算子内部进行累加
在Driver端汇总
累加器支持在所有不同节点之间进行累加计算

广播变量

在Driver端广播:sc.broadcast()
在算子内部取用,不能进行修改
广播到每个Executor中
用完记得“销毁”
如果直接将数据封装task中,会产生很多副本,增加网络传输的数据量,降低效率,因为task的数量远大于Executor的数量

import java.lang

import org.apache.commons.lang3.StringUtils
import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.util.LongAccumulator
import org.apache.spark.{SparkConf, SparkContext}

object Demo18ShareVariable {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setAppName(" ").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)
    val lines: RDD[String] = sc.textFile("spark/data/words2.txt")
    //需求:
    // 以词频统计WordCount程序为例,处理的数据word2.txt所示,包括非单词符号,
    // 做WordCount的同时统计出特殊字符的数量
    //创建一个计数器/累加器
    val mycounter: LongAccumulator = sc.longAccumulator("mycounter")
    //定义一个特殊字符集合
    val ruleList: List[String] = List(",", ".", "!", "#", "$", "%", "(", ")")
    //将集合作为广播变量广播到各个节点
    val broadcast: Broadcast[List[String]] = sc.broadcast(ruleList)
    //TODO 2.transformation
    val wordcountResult: RDD[(String, Int)] = lines.filter(StringUtils.isNoneBlank(_))
      .flatMap(_.split("\\s+"))
      .filter(ch => {
        //获取广播数据
        val list: List[String] = broadcast.value
        if (list.contains(ch)) { //如果是特殊字符
          mycounter.add(1)
          false
        } else { //是单词
          true
        }
      }).map((_, 1))
      .reduceByKey(_ + _)

    //TODO 3.sink/输出
    wordcountResult.foreach(println)
    val chResult: lang.Long = mycounter.value //特殊字符数量
    println("特殊字符的数量:"+chResult)
  }
}

标签:String,val,apache,sc,import,Spark,spark,共享,变量
来源: https://www.cnblogs.com/lmandcc/p/15546172.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有