当前位置: 首页 > news >正文

RDD的自定义分区器

一、先创一个order.csv文件

内容如下:

1,99,备注1
222,92,备注2
1101,99,备注1
232,392,备注2
2110,99,备注1

二、建一个scala的object类,代码如下

import org.apache.spark.{Partitioner, SparkConf, SparkContext}// 创建一个类继承Partitioner
class OrderPartitioner extends Partitioner {override def numPartitions: Int = 2 // 两个分区,编号就是: 0, 1// key - valueoverride def getPartition(key: Any): Int = {
// 如果key在2001和2003之间,就返回 0
// 否则,返回 1
val keyInt = key.asInstanceOf[Int]if (keyInt > 2000 && keyInt < 2003) {0} else {1}}
}// case class
case class Order(id: Int, price: Double, category: String)object PartitionOrder {def main(args: Array[String]): Unit = {// 创建SparkContextval conf = new SparkConf().setAppName("Partition").setMaster("local[*]")val sc = new SparkContext(conf)// 初始数据val rdd = sc.textFile("data/order.csv")val rdd1 = rdd.map(line => {val fields = line.split(",")(fields(0).toInt, Order(fields(0).toInt, fields(1).toDouble, fields(2)))})// 使用自定义分区器val rdd2 = rdd1.partitionBy(new OrderPartitioner)rdd2.map(x => x._2).saveAsTextFile("output18")val regionTotalAmount = rdd2.mapPartitions((iter) => {var count = 0var totalAmount = 0.0// 同时计算件数和总金额while (iter.hasNext) {val item = iter.next()count += 1val price = item._2.priceprintln(price)totalAmount += price}Iterator(s"${count}件,$totalAmount")})// 在分区完成之后的基础上,只保留key//    val rdd3 = rdd2.map( x => x._2)regionTotalAmount.saveAsTextFile("output19")}
}

相关文章:

  • 运行Spark程序-在shell中运行
  • 【Ubuntu】neovim Lazyvim安装与卸载
  • 网络状态可以通过hutool.HttpStatus获取
  • 讯联云库项目开发日志(一)
  • 3.2 一点一世界
  • 嵌入式学习笔记 - HAL_ADC_ConfigChannel函数解析
  • 出于PCB设计层面考虑,连排半孔需要注意哪些事项?
  • 构建媲美 ChatGPT 的 AI 交互界面—OpenWebUI
  • Flannel UDP 模式的优缺点
  • WebRTC技术EasyRTC嵌入式音视频通信SDK打造远程实时视频通话监控巡检解决方案
  • JPG与PDF格式转换器
  • 06 mysql之DML
  • R-tree详解
  • 2025年第十六届蓝桥杯大赛软件赛C/C++大学B组题解
  • C++设计模式——单例模式
  • SpringBoot 3.X 开发自己的 Spring Boot Starter 和 SpringBoot 2.x 的区别
  • Python查询ES错误ApiError(406, ‘Content-Type ...is not supported
  • 【传感器多模态融合与AI驱动】
  • Leetcode 3548. Equal Sum Grid Partition II
  • 常见网卡接口命名方式
  • 持续8年仍难终了的纠纷:败诉方因拒执罪被立案,胜诉方银行账户遭冻结
  • 旭辉控股集团主席林中:债务重组是活下来的前提,自营开发业务收缩至少数核心城市
  • 央行等印发《关于金融支持广州南沙深化面向世界的粤港澳全面合作的意见》
  • 广西壮族自治区党委政法委副书记李文博接受审查调查
  • 深一度|在亚马尔的天才面前,姆巴佩戴上“帽子”又如何
  • 减重人生|走过节食弯路,她如何半年减60斤找回自信?