package org.example
import org.apache.spark.{Partitioner, SparkConf, SparkContext}
case class Order(id: Int, price: Double, info: String) {
override def toString: String = s"$id, $price, $info"
}
class orderPartitioner extends Partitioner{
override def numPartitions: Int = 3
override def getPartition(key: Any): Int = {
//0-1000 => 1
//1001-2000 => 2
//3
if (key.asInstanceOf[Int] <= 1000) {
0
} else if (key.toString.toInt <= 2000) {
1
} else {
2
}
}
}
object PartitionOrder {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Partition").setMaster("local[*]")
val sc = new SparkContext(conf)
//读入data/order.csv 创建RDD
val orderRDD = sc.textFile("data/order.csv")
val rdd1 = orderRDD.map(line => {
val fields = line.split(",")
val order = Order(fields(0).toInt, fields(1).toDouble, fields(2))
(order.id, order)
})
val rdd2 = rdd1.partitionBy(new orderPartitioner)
rdd2.map(x => x._2).saveAsTextFile("data/output1")
rdd2.mapPartitions(iter => {
var count = 0
var sum = 0.0
iter.foreach(x => {
sum += x._2.price
count += 1
})
Iterator(s"${count}件, ${sum}元")
})saveAsTextFile("data/output2")
}
RDD-自定义分区器案例
懒惰的橘猫2025-05-14 9:26
相关推荐
问商十三载3 小时前
AI引擎生成式优化实践:刑事辩护律师团队IP构建会议咨询4 小时前
2026年大数据、信息系统与智能通信国际会议(BDIIC 2026)Raas1004 小时前
MAI Gateway(魔芋企业级AI网关)能力解析:AI网关能做故障转移吗?AI网关核心功能详解IT研究所5 小时前
AI-ITR平台如何减少客户问题反复升级?回眸&啤酒鸭6 小时前
【回眸】OpenSwarm 多智能体协作系统实战指南大大大大晴天6 小时前
每天认识一个组件:Apache DolphinScheduleryumgpkpm7 小时前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册邓工说电7 小时前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读出海客7 小时前
跨境电商多语言客服知识库怎么建:资料结构、检索边界与人工升级liliangcsdn7 小时前
派息率指标的应用探索和分析