zoukankan      html  css  js  c++  java
  • 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查询

  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/13187773.html
Copyright © 2011-2022 走看看