• Spark的Join连接


    Broadcast Join

    适合情况,小表和大表,小表非常小,适合传播到各个节点。

    当大表小表连接时,为了避免Shuffle,我们可以将小表广播到各个节点内存,供大表连接。一定程度上牺牲了空间,避免了Shuffle。这种Join在Spark中称作Broadcast Join。(需要注意的点是广播的只能是小表)

    Shuffle Hash Join

    适合情况,大表和小表,小表数据量增大,广播消耗资源大,按照join key进行分区,key相同分区也一定相同。大表分区,最后将两个表的数据进行hash join。

    对两张表分别按照join keys进行重分区,即shuffle,目的是为了让有相同join keys值的记录分到对应的分区中。对对应分区中的数据进行join,此处先将小表分区构造为一张hash表,然后根据大表分区中记录的join keys值拿出来进行匹配。

    1. 确定Build Table和Probe Table。
    2. 构建HashTable 依次读取小表的join key进行hash,生成的哈希表缓存在内存中。
    3. 扫描大表,将相同join key的数据连接起来。

    Broadcast Join和Shuffle Hash Join都是HashJoin。只不过在hash join之前需要先shuffle还是先broadcast。

    Sort-Merge Join

    适合情况,大表和大表。

    共有三步:

    1. shuffle阶段:将两张大表根据join key进行重新分区,两张表数据会分布到整个集群,以便分布式并行处理
    2. sort阶段:对单个分区节点的两表数据,分别进行排序
    3. merge阶段:对排好序的两张分区表数据执行join操作。join操作很简单,分别遍历两个有序序列,碰到相同join key就merge输出,否则取更小一边

    数据仓库设计时最好避免大表与大表的join查询

  • 相关阅读:
    (转)Linux netstat命令详解
    4G模块*99#拨号上网
    (转)Linux系统-tcpdump常用抓包命令
    (转)Makefile介绍
    导航和渲染首页文章列表
    删除项目开发中的.pyc文件
    django之media配置
    基于Ajax提交formdata数据、错误信息展示和局部钩子、全局钩子的校验。
    点击头像上传文件的效果
    使用python实现滑动验证码
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/13187773.html
Copyright © 2020-2023  润新知