SPARK[RDD之分区函数]

rdd的计算都是以partiotion为单元的,这些分区的转换函数(见后面的章节)不会直接返回结果。当出现collect,count,toList,print才会真正执行。

分区函数

分区函数确定了 宽窄依赖,如果父RDD的key只映射到子RDD中的一个key,则是窄依赖。反之为宽依赖。

spark默认的两种分区函数,hash分区和range分区。分区函数只能适用于<K,V>类型的RDD,非<K,V>类型的分区函数为None

val partitions = sc.textFile("/home/.../.../test/log",2);
partitions.partitioner
res0: None
val new_partitions = partitions.map(x,x).groupByKey(new HashPartitioner(3))

《SPARK[RDD之分区函数]》 Paste_Image.png

回顾前面的知识,RDD的分区如何被找到呢?
在一个DAG执行过程中,一般从HDFS文件作为出发点,集合函数在dadanode上执行,如果执行完生成新的RDD分区还在本机,则下一个集合函数继续在本机上执行,如果生成的RDD分区部分(或全部)不再本机上了,集合函数将在其他机器上执行,是如何做到跟踪的呢?

val location = rdd.preferredLocations(rdd.dependecies(0))

首选位置函数显示的知道了rdd的分区位置,底层具体怎么实现,便不知了。。

    原文作者:北风第一支
    原文地址: https://www.jianshu.com/p/f0fd104b1b14
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞