大数据全系列 教程
1869个小节阅读:467.7k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
用法∶
xxxxxxxxxx
def partitionBy(partitioner: Partitioner): RDD[(K, V)]
Partitioner类
xxxxxxxxxx
abstract class Partitioner extends Serializable {
//重新分区后有几个分区
def numPartitions: Int
//自定义分区规则。传入参数进来,类型无所谓,但是返回值一定是int类型。将key传给这个函数,你自己写逻辑,最后返回一个分区编号,分区编号从0开始,不要超出分区总数-1
def getPartition(key: Any): Int
}
代码实现:
xxxxxxxxxx
package com.itbaizhan.rdd
//1.导入类
import org.apache.spark.rdd.RDD
import org.apache.spark.{Partitioner, SparkConf, SparkContext}
object RddPartitionBy {
def main(args: Array[String]): Unit = {
//2.构建SparkConf对象,并设置本地运行和程序名称
val conf: SparkConf = new SparkConf().setMaster("local[1]").
setAppName("partitionBy")
//3.使用conf对象构建SparkContet对象
val sc = new SparkContext(conf)
//5.创建1个RDD对象
val rdd: RDD[(String, Int)] = sc.parallelize(List(("andy", 1), ("jack", 1),
("hello", 1), ("lucy", 1), ("tom", 1), ("su", 1)))
println("重新自定义分区前:"+rdd.getNumPartitions)
//6.调用partitionBy()对rdd对象进行重新分区
val rdd1: RDD[(String, Int)] = rdd.partitionBy(new Partitioner {
override def numPartitions = 3
override def getPartition(key: Any): Int = {
//获取key的首字母
val firstChar: Char = key.toString.charAt(0)
//['a','i] => 0
if (firstChar >= 'a' && firstChar <= 'i') {
return 0
} else if (firstChar >= 'j' && firstChar <= 'q') {
return 1
} else {
return 2
}
}
})
val result: Array[Array[(String, Int)]] = rdd1.glom().collect()
//输出
result.foreach(arr=>println(arr.mkString(",")))
//4.关闭sc对象
sc.stop()
}
}
运行结果:
xxxxxxxxxx
重新自定义分区前:1
(andy,1),(hello,1)
(jack,1),(lucy,1)
(tom,1),(su,1)
实时效果反馈
1. 关于下面代码的描述错误的是:
xxxxxxxxxx
rdd.partitionBy(new Partitioner {
override def numPartitions = 3
override def getPartition(key: Any): Int = {
val firstChar = key.toString.charAt(0)
if (firstChar >= 'a' && firstChar <= 'i')
return 0
else if (firstChar >= 'j' && firstChar <= 'q')
return 1
else
return 2
}
})
A numPartitions = 3
:重新分区后有3个分区。
B getPartition
自定义分区规则,它是一个函数。
C getPartition
函数的返回值的最大值为3。
D getPartition
函数有返回值。
答案:
1=>C 最大值为2