sparkcore案例四:统计每个省份的用户访问量

  • 题目:
/**
 * 统计每个省份的用户访问量,最终要求将不同省份用户访问量存放到不同的分区中 分区存放规则如下
 * 省份是以包含  山    0
 * 如果省份包含  海    1
 * 其他省份           2
 */
  • 代码:
package sparkcorerddexample

import org.apache.spark.rdd.RDD
import org.apache.spark.{Partitioner, SparkConf, SparkContext}
/**
 * 统计每个省份的用户访问量,最终要求将不同省份用户访问量存放到不同的分区中 分区存放规则如下
 * 省份是以包含  山    0
 * 如果省份包含  海    1
 * 其他省份           2
 */
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
    }
  }
}
posted @ 2022-08-27 12:09  jsqup  阅读(76)  评论(0编辑  收藏  举报