本篇所使用到的数据可以在此处找到点击下载.
SparkRDD实操练习一
数据浏览
个字段分别是:时间戳、省份、城市、用户、广告,分割符是空格
每一条数据代表了一次点击
需求:
- 统计出 每一个省份 每个广告被点击数量 排行的TOP3
代码实现
object RDDTest {
def main(args: Array[String]): Unit = {
val spark = new SparkConf().setMaster("local[6]").setAppName("agentTest")
val sc = new SparkContext(spark)
//读取数据
val sourceRDD = sc.textFile("data/agent.log")
//取所需要的出数据
//此时数据格式为:((省份,广告),1)
val dataRDD = sourceRDD.map(line => ((line.split(" ")(1), line.split(" ")(4)), 1))
.reduceByKey(_ + _) //计算每一个省份每一个广告的总点击量,现在的数据格式((省份,广告),总点击量)
.map(item => (item._1._1, (item._1._2, item._2)))//将格式转换成(省份,(广告,总点击量))
.groupByKey()//按照省份分组
.mapValues(iter =>{//此时我们不需要动key,只需要将value部分排序,就可以使用mapValue
iter.toList.sortBy(_._2)(Ordering.Int.reverse).take(3)//这里不是对RDD的排序,是对List的排序,需要记住
})
.collect()
.foreach(println(_))
sc.stop()
}
}
结果展示