【Spark】Spark框架RDD算子实操

Spark框架RDD算子实操

项目名称:使用RDD算子在日志文件中找到不同省份的人对各城市关注度的排行

实验时间:2023年8月18日

实验地点:sict-reid

实验数据分析

实验数据包含日期、时间、用户所在省份、用户关注城市、用户ID,格式如下

1992-07-14 03:57:05 广东省 上海市 xiulan39

在本次实验中,我们只需关注“用户所在省份、用户关注城市”即可。

实验思路

1、以(用户所在省份,用户关注城市)作为Key进行Count,统计中每个省份对不同城市的关注度。

2、将用户关注城市作为Key,将(用户所在成分,关注度值)作为value生成迭代器

3、将迭代器数据进行降序排序并打印输出

实验核心代码

从文件中获取数据

val dataRdd = sc.textFile("data/output.log")

本次文件读取相对路径本地文件

数据清洗,获得(key,1)结构

val mapRDD = dataRdd.map(
    line => {
        val strings = line.split(" ")
        ((strings(2), strings(3)), 1)
    }
)

将key做数值聚合,获取各省份对不同城市的关注度

val reduceRDD: RDD[((String,String),Int)] = mapRDD.reduceByKey(_+_)

对该中间结果进行调整(采用模式匹配方式)

val newMapRDD = reduceRDD.map {
    case ((local, attention), num) => {
        (attention, (local, num))
    }
}

对关注城市key做聚合,形成迭代器

val groupRDD: RDD[(String,Iterable[(String,Int)])] = newMapRDD.groupByKey()

对迭代器进行排序处理

val resultRDD = groupRDD.mapValues(
    iter => {
        iter.toList.sortBy(_._2)(Ordering.Int.reverse)
    }
)

实验结果

(天津市,List((北京市,26), (广东省,24), (上海市,23), (重庆市,23), (江苏省,23), (浙江省,18), (天津市,14)))
(深圳市,List((上海市,25), (北京市,23), (浙江省,21), (江苏省,20), (天津市,20), (重庆市,19), (广东省,19)))
(重庆市,List((浙江省,21), (江苏省,21), (广东省,16), (重庆市,16), (上海市,15), (北京市,15), (天津市,15)))
(杭州市,List((浙江省,27), (江苏省,26), (北京市,22), (广东省,21), (天津市,18), (上海市,18), (重庆市,17)))
(广州市,List((重庆市,23), (上海市,22), (广东省,21), (北京市,19), (天津市,18), (浙江省,18), (江苏省,16)))
(北京市,List((江苏省,31), (北京市,25), (重庆市,25), (上海市,20), (浙江省,17), (天津市,17), (广东省,15)))
(上海市,List((广东省,29), (天津市,28), (重庆市,24), (江苏省,22), (上海市,22), (北京市,17), (浙江省,5)))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值