美文网首页
对join with inputs co-partitioned

对join with inputs co-partitioned

作者: DuLaGong | 来源:发表于2019-05-10 18:33 被阅读0次
宽依赖和窄依赖 

在学习spark宽依赖、窄依赖的时候,对 map算子是窄依赖、reduceByKey算子是宽依赖 都好理解;而对于join with inputs co-partitioned是窄依赖理解不深刻,特此记录。

在spark中如何表示RDD之间的依赖关系分为两类: 

①窄依赖:每个父RDD的分区都至多被一个子RDD的分区使用,即为OneToOneDependecies; 

②宽依赖:多个子RDD的分区依赖一个父RDD的分区,即为OneToManyDependecies。

由上图可知,join分为宽依赖和窄依赖,如果RDD有相同的partitioner,那么将不会引起shuffle,因此我们可以对RDD进行Hash分区。分别对A和B用同一个函数进行Partition,比如按照首字母进行Partition,那么A和B都可以分成26个Partition,并且A1只需要和B1进行join,A1不需要和B剩下的25个Partition进行join,这样就大大的减少了join次数,最好的办法是对表进行分区,每次只取两个对应分区的数据进行join操作。具体的Hash Partition函数需要根据具体的应用场景实现。分区大小需要根据task-nums、num-executors以及executor-cores确定。

用自己的话理解就是在join之前,两个rdd(rdd是跨节点的)用相同的分区策略进行分区,保证相同的key在同一个分区,也就保证分区后相同的key在同一个节点上(spark计算末尾,一般会把数据做持久化到hive,hbase,hdfs等等。我们就拿hdfs举例,将RDD持久化到hdfs上,RDD的每个partition就会存成一个文件,如果文件小于128M,就可以理解为一个partition对应hdfs的一个block。反之,如果大于128M,就会被且分为多个block,这样,一个partition就会对应多个block),这样就可以保证join的时候没有网络传输,没有shuffle,也就是窄依赖。

相关文章

  • 对join with inputs co-partitioned

    在学习spark宽依赖、窄依赖的时候,对 map算子是窄依赖、reduceByKey算子是宽依赖 都好理解;而对于...

  • No Inputs

    纽约的四月仍然是一片凄风冷雨,踏上这片土地的第9个月,我的活动范围就没有超过曼哈顿上西区50公里。 比这更悲剧的是...

  • 数据库小结

    1、数据库Left JOIN一对多,Left JOIN左连接,数据不会增多多对一,Left JOIN左连接,数据不...

  • [PyTorch中文文档]-Package参考-torch-索引

    torch.cat(inputs, dimension=0) → Tensor 在给定维度上对输入的张量序列seq...

  • [filebeat]采集docker日志

    Filebeat的工作原理:启动Filebeat时,它会启动一个或多个inputs,这些inputs将查找指定的l...

  • Advanced inputs and outputs

    # Define safe_readLines() safe_readLines <- safely(readLi...

  • Be present, and limit the inputs

    In 2010 at New York’s Museum of Modern Art, the artist Ma...

  • 2020-01-10

    var inputs = document.getElementsByTagName("input"); for(...

  • 多线程

    join()join就是指等待该线程结束,然后才继续往下执行自身线程,如果该线程已经结束,对实例调用join()会...

  • tf.layers.conv1d

    功能:生成卷积核,对输入层进行卷积,产生输出的tensor。 inputs:输入一个tensor。 filters...

网友评论

      本文标题:对join with inputs co-partitioned

      本文链接:https://www.haomeiwen.com/subject/kcczoqtx.html