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))
Paste_Image.png

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容