文档章节

Spark利用Broadcast实现Join避免Shuffle操作

d
 dreamness
发布于 07/22 12:59
字数 232
阅读 10
收藏 0

在Spark中, 诸如ReduceByKey,GroupByKey等操作会触发Shuffle, 影响性能。
本文提供了一种利用广播Broadcast, 实现了join操作, 避免了Shuffle。

正常的join操作


    val sc = new SparkContext(new SparkConf().setMaster("local").setAppName("test"))
    // data1为较小数据, data2为较大数据
    val data1 = sc.parallelize(Array(("1", "aa"),("2", "bb"),("3", "cc")),2)
    val data2 = sc.parallelize(Array(("1", "spark", "hadoop"),("2", "ElasticSearch", "Flume"),("3", "Kafka", "Redis"),("4", "Flink", "HDFS"),("5", "Yarn", "Linux"),("6", "Windows", "MySQL")),3)
        .map(x=>(x._1, x))

   data1.join(data2).foreach(println(_))

本文利用的方法


    val data1Broadcast = sc.broadcast(data1.collectAsMap())
    data2.map(x => {
      (x, data1Broadcast.value.getOrElse(x._1, ""))
    }).filter(_._2!="").foreach(println(_))

其中, Broadcast会将数据分发至每个节点的内存中, 本方法只适合小数据, 否则会触发OOM。

© 著作权归作者所有

d

dreamness

粉丝 2
博文 36
码字总数 12035
作品 0
沈阳
私信 提问
[转载] 是时候学习真正的 spark 技术了

本文转自:https://mp.weixin.qq.com/s/awT4aawtTIkNKGI_2zn5NA 本站转载已经过作者授权。任何形式的转载都请联系原作者(孙彪彪/marketing@qiniu.com)获得授权并注明出处。 spark sql 可以...

开源大数据
2018/12/03
0
0
是时候学习真正的 spark 技术了

spark sql 可以说是 spark 中的精华部分了,我感觉整体复杂度是 spark streaming 的 5 倍以上,现在 spark 官方主推 structed streaming, spark streaming 维护的也不积极了, 我们基于 sp...

七牛云
2018/11/21
0
0
Adaptive Execution patch and how to bulid on cdh5

导读:本文所述内容均基于 2018 年 9 月 17 日 Spark 最新 Spark Release 2.3.1 版本,以及截止到 2018 年 10 月 21 日 Adaptive Execution 最新开发代码。自动设置 Shuffle Partition 个数已...

hblt-j
02/14
5
0
【Spark】Spark Core 高级特性

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/86715204 1、Spark优化 (1)代码优化 1)如果一个RDD只使用一次,那么不赋值...

魏晓蕾
01/31
0
0
高性能Spark作业基础:你必须知道的调优原则及建议

在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操...

李雪蕤
2018/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部