0
点赞
收藏
分享

微信扫一扫

spark的高阶用法

司马吹风 2023-06-09 阅读 72

广播变量broadcast

#定义
map_list = {(1,'dawang',22),(2,'xiaogou',333).....}
broadcast = sc..broadcast(map_list)
#使用
for i in broadcast.value:
	print(i)

累加器accumulator

from pyspark import SparkConf, SparkContext, StorageLevel
from operator import add

if __name__ == '__main__':
    # 1.通过sparkcof创建conf对象
    conf = SparkConf().setAppName('test').setMaster('local[*]')
    # 2.生成sc对象
    sc = SparkContext(conf=conf)
    # spark提供的参数,参数是初始值
    aclator = sc.accumulator(0)
    rdd = sc.parallelize([1, 2, 3, 4, 5, 6, 7], 2)
    def add_num(data):
        global aclator
        aclator += 1
    rdd2 = rdd.map(add_num)
    rdd2.cache()
    rdd2.collect()

    rdd3 = rdd.map(lambda x: x)
    rdd3.collect()

DAG-执行流程图

DAG的宽依赖(shuffle)和窄依赖

spark如何做内存计算,DAG的作用?stage阶段划分的作用?

在这里插入图片描述

spark为什么比mapreduce快?

  • spark算子丰富,mapreduce只有map和reduce两个算子.
  • mapreduce是在磁盘上进行交互,遇到复杂的极端涉及的磁盘交互会更多.运算就会变慢.
  • spark可以走内存迭代计算,算子之间形成DAG,DAG根据宽窄依赖划分出阶段,单一阶段内形成内存管道迭代.

spark并行度

集群中如何规划并行度,一般是cpu核心的2~10倍.
在这里插入图片描述

spark的任务调度过程

  • 逻辑DAG的产生
  • 分区DAG的产生
  • task分区任务的产生
  • 将task分散给executor并监控其工作(worker的工作,上面三个是driver的工作)
    在这里插入图片描述

spark层级关系梳理

在这里插入图片描述

DAG的知识总结

DAG是有向无环图,用于描述任务执行流程,主要协助DAG调度器构建task,分配用作任务管理

基于款窄依赖进行阶段划分,阶段内部都是窄依赖可以构建内存迭代的管道.

构建task分配用做任务管理

举报

相关推荐

0 条评论