| /** |
| * 统计每个省份的用户访问量,最终要求将不同省份用户访问量存放到不同的分区中 分区存放规则如下 |
| * 省份是以包含 山 0 |
| * 如果省份包含 海 1 |
| * 其他省份 2 |
| */ |
| |
| package sparkcorerddexample |
| |
| import org.apache.spark.rdd.RDD |
| import org.apache.spark.{Partitioner, SparkConf, SparkContext} |
| |
| |
| |
| |
| |
| |
| object A4ProvinceVisit { |
| def main(args: Array[String]): Unit = { |
| val sparkConf:SparkConf = new SparkConf().setAppName("demo02").setMaster("local[3]") |
| val sc:SparkContext = new SparkContext(sparkConf) |
| |
| val value: RDD[String] = sc.textFile("hdfs://node1:9000/dc") |
| val map = value.map((line: String) => { |
| val array = line.split(" ") |
| val province: String = array(array.length - 4) |
| (province, 1L) |
| }) |
| val rdd = map.reduceByKey(new ProvincePartitioner(), _ + _) |
| println(rdd.getNumPartitions) |
| rdd.saveAsTextFile("hdfs://node1:9000/province") |
| } |
| } |
| |
| class ProvincePartitioner extends Partitioner { |
| override def numPartitions: Int = 3 |
| |
| override def getPartition(key: Any): Int = { |
| val province = key.toString |
| if (province.contains("山")) { |
| 0 |
| } else if (province.contains("海")) { |
| 1 |
| } else { |
| 2 |
| } |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?