RDD Partition/Partitioner

RDD是由若干个partition构成的,一份待处理的原始数据会被按照相应的逻辑切分成n份,每份数据对应到RDD中的一个Partition,Partition的数量决定了task的数量,影响着程序的并行度,所以理解Partition是了解spark背后运行原理的第一步。

RDD的生成方式共有三种:

  1. 从Scala集合中创建,通过调用sc.makeRDD()和sc.parallelize()生成
  2. 加载外部数据来创建RDD,调用sc.textFile()方法
  3. 由其他RDD执行transform操作转换而来

一般来说,加载Scala集合或者外部数据创建RDD的时候可以指定partition个数

决定RDD的每一条消息应该分到哪一个分区的就是Partitioner,只有<key,value>形式的RDD才有Partitioner

Partitioner主要有两种,分别是Hash Partititoner(默认)和Range Partititoner.

使用Partitioner必须满足两个前提:1.rdd必须是<key,value>形式 2.发生shuffle操作

data skew(数据倾斜):由于hash计算出的key值对应的数据量大小不同导致的,解决办法是通过自定义partitioner来解决

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

推荐阅读更多精彩内容