说明

  • RDD中的元素按照key指定的分区规则进行分区。
  • RDD中的元素必须是键值对类型。
  • 如果原有的partitionRDD和现有的partitionRDD一致的话就不进行分区,否则会发生shuffle。

函数签名

代码示例(默认分区器)

 val conf: SparkConf = new SparkConf().setAppName(this.getClass.getName).setMaster("local[*]")val sc = new SparkContext(conf)// 按照key分区,所以数据必须是k-v键值对类型val rdd: RDD[(String, Int)] = sc.makeRDD(List(("a", 1), ("b", 2), ("c", 3), ("d", 4)), 2)println("-------------------重新分区前--------------------")rdd.mapPartitionsWithIndex {(index, datas) => {println(index + "--->" + datas.mkString(","))datas}}.collect()println("-------------------重新分区后--------------------")//按照哈希值进行分区val newRDD: RDD[(String, Int)] = rdd.partitionBy(new HashPartitioner(3))newRDD.mapPartitionsWithIndex {(index, datas) => {println(index + "--->" + datas.mkString(","))datas}}.collect()sc.stop()

代码实现(自定义分区器)

class MyPartitioner(partitions: Int) extends Partitioner {// 分区数量override def numPartitions: Int = partitions// 分区逻辑 返回值为分区编号override def getPartition(key: Any): Int = {// 将key的类型转为String类型val k: String = key.asInstanceOf[String]if (k.startsWith("136")) 0else if (k.startsWith("137")) 1else if (k.startsWith("138")) 2else 3}
}
 // 调用自定义分区器val rdd: RDD[(String, String)] = sc.makeRDD(List(("13698624174", "河北"), ("13766887551", "广东"),("13876543211", "上海"), ("17677885551", "河南")), 2)println("-------------------重新分区前--------------------")rdd.mapPartitionsWithIndex {(index, datas) => {println(index + "--->" + datas.mkString(","))datas}}.collect()println("-------------------重新分区后--------------------")val newRDD: RDD[(String, String)] = rdd.partitionBy(new MyPartitioner(4))newRDD.mapPartitionsWithIndex {(index, datas) => {println(index + "--->" + datas.mkString(","))datas}}.collect()

spark按照key分区:partitionBy相关推荐

  1. mysql 分区 key 写法_MySQL KEY分区

    介绍 KEY分区和HASH分区相似,但是KEY分区支持除text和BLOB之外的所有数据类型的分区,而HASH分区只支持数字分区,KEY分区不允许使用用户自定义的表达式进行分区,KEY分区使用系统提供 ...

  2. 深入理解Spark RDD——RDD分区计算器Partitioner

    在<深入理解Spark RDD--RDD依赖(构建DAG的关键)>一文,详细描述了RDD的宽窄依赖.RDD之间的依赖关系如果是Shuffle依赖,那么上游RDD该如何确定每个分区的输出将交 ...

  3. mysql的hash分区_MySQL中hash和key分区值的计算方法

    MySQL中hash和key分区值的计算方法 mysql中有一种叫作key作为partition key的类型.来看看记录是怎么分布的 对于hash 分区,使用%操作符,每个partition key ...

  4. Mysql中default分区,MySQL中的分区(六)KEY分区

    KEY分区和HASH分区类似. HASH分区只支持整数分区,而KEY分区支持使用除BLOB和Text外其他类型的列作为分区键, 创建分区表的时候,可以不指定分区键,默认会首先选择使用主键作为分区键. ...

  5. mysql 分区 key 写法_mysql数据库KEY分区用法

    mysql数据库KEY分区用法 按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的 哈希函数是由MySQL 服务器提供.MySQL 簇(Cluster)使 ...

  6. Spark RDD的分区规则详解

    Spark RDD的分区规则 一.RDD中数据来源 二.读取内存数据分区规则 三.读取文件数据分区规则 3.1 分区数量的计算规则 3.2 数据分配到哪个分区规则 一.RDD中数据来源 2个地方:本地 ...

  7. MySQL之KEY分区和LINEAR KEY分区

    上一篇:MySQL之HASH分区和LINEAR HASH分区初识 KEY分区 KEY分区与HASH分区相似,当然有不同点 (1)在HASH分区中,可以使用整数列或者基于列值的表达式,即PARTITIO ...

  8. Mysql分区 - Key分区

    1.Range(范围) – 这种模式允许DBA将数据划分不同范围.例如DBA可以将一个表通过年份划分成三个分区,80年代(1980's)的数据,90年代(1990's)的数据以及任何在2000年(包括 ...

  9. spark中repartition, coalesce, partitionBy, repartitionAndSortWithinPartitions 四种重分区算子

    美图欣赏: 一.背景 spark中一共有四种重分区算子: 1.repartition 2.coalesce 3.partitionBy 4.repartitionAndSortWithinPartit ...

最新文章

  1. 【RocketMQ工作原理】消息的生产过程
  2. Educational Codeforces Round 7 B. The Time 水题
  3. 那些年,面试被虐过的红黑树 1
  4. MQTT数据接收流程之数据处理回调函数注册(基于LWIP/RDA8955平台)
  5. 利用python爬虫(part3)--正则表达式
  6. community 计算模块度_光模块深度:国内光模块企业快速崛起
  7. 鸿蒙系统会不会影响游戏,令人担心,鸿蒙系统会不会让人失望?未来难说
  8. python 字典练习 记录学生是否交作业的小程序
  9. 深度学习《CNN架构续篇 - BatchNorm》
  10. 方差(Variance)和标准差(Standard Deviation)
  11. 【C++leetcode】寻找给定字符串的最大回文子串
  12. 小程序 调用地址api
  13. Vue 倒计时插件 vue2-countdown
  14. oracle财务模块培训,ORACLE财务管理系统培训手册之现金模块
  15. 嵌入式c语言编程,嵌入式C语言编程集萃.pdf
  16. scrapy分布式写入到mysql_scrapy-redis分布式爬虫去重异步写入mysql数据库实例代码...
  17. HiveSQL小练习--求连续消费的天数
  18. 16 - 12 - 20 KMP算法 模式匹配 终极奥义!
  19. Python 实现一个自动下载小说的简易爬虫
  20. linux lxde桌面快捷键,LXde 桌面有两下啊

热门文章

  1. jap重定向 中文乱码
  2. 城市照明的“神经末梢”——PLC-IoT单灯控制器
  3. python correlate_如何解释numpy.correlate和numpy.corrcoef值?
  4. 计算机美工的专科学校,高职院校计算机专业网页美工设计教学.docx
  5. CFileDialog 使用
  6. NOIP初赛复习【比较老的资料,基础理论知识部分比较全】
  7. windows 使用 sg3_utils-1.42_mw64exe
  8. window.open与window.showModalDialog的分析
  9. 堂食快餐连锁店系统(一)业务流程分析
  10. 说明所有BeanPostProcessor的触发时机