Spark partitionBy

编程入门 行业动态 更新时间:2024-10-28 14:21:51

<a href=https://www.elefans.com/category/jswz/34/1769717.html style=Spark partitionBy"/>

Spark partitionBy

目录

    • Spark partitionBy 功能
    • 案例演示

Spark partitionBy 功能

按照key重新分区

案例演示

rdd: RDD[(Int, String)] = sc.makeRDD(List((1, “aaa”), (2, “bbb”), (3, “ccc”)), numSlices = 3)

需求1:按照key的奇偶存放数据到不同分区(要求使用默认分区器)

结果如下:
0—>(2,bbb)
1—>(1,aaa),(3,ccc)

需求2:将所有数据都存放到1号分区(要求自定义分区器)

结果如下:
2—>
0—>
1—>(1,aaa),(2,bbb),(3,ccc)

package com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transformimport org.apache.spark.rdd.RDD
import org.apache.spark.{HashPartitioner, Partitioner, SparkConf, SparkContext}/*** @Desc : 按照Key重新分区* @note : RDD本身是没有partitionBy这个算子的,通过隐式转换动态给kv类型的RDD扩展的功能*/
object Spark12_PartitionBy {def main(args: Array[String]): Unit = {//创建配置文件val conf: SparkConf = new SparkConf().setAppName("Spark12_PartitionBy").setMaster("local[*]")//创建SparkContext,该对象是提交的入口val sc = new SparkContext(conf)//创建RDDval rdd: RDD[(Int, String)] = sc.makeRDD(List((1, "aaa"), (2, "bbb"), (3, "ccc")), numSlices = 3)//先按照分区打印分布rdd.mapPartitionsWithIndex {(index, datas) => {println(index + "--->" + datas.mkString(","))datas}}.collect()println("********************************************")//方式1 采用默认分区器val newRDD1: RDD[(Int, String)] = rdd.partitionBy(new HashPartitioner(2))//查看分区后的数据分布newRDD1.mapPartitionsWithIndex {(index, datas) => {println(index + "--->" + datas.mkString(","))datas}}.collect()println("********************************************")//方式2 自定义分区器val newRDD2: RDD[(Int, String)] = rdd.partitionBy(new MyPartitioner(3))//查看分区后的数据分布newRDD2.mapPartitionsWithIndex {(index, datas) => {println(index + "--->" + datas.mkString(","))datas}}.collect()//释放资源sc.stop()}
}class MyPartitioner(i: Int) extends Partitioner {//获取分区的个数override def numPartitions: Int = i//指定分区规则 返回值Int表示分区编号,从0开始override def getPartition(key: Any): Int = {//这里的代码逻辑和mapreduce类似1 //把所有数据存放到1号分区}
}

更多推荐

Spark partitionBy

本文发布于:2023-07-28 17:48:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1267064.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Spark   partitionBy

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!