日报日报!刚出炉的综合性Rdd操作练习题!快来看了!!!

本文通过清洗和分析租房信息数据,采用Spark技术实现对特定条件下的数据筛选与统计,包括地区人数对比、地铁线路租户数量及热门地区排名等,展示了大数据处理在房地产领域的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目👌👌👌

以下是租房信息的数据结构:数据之间使用tab进行分割,数据在housedata.txt文件中。
依次是:数据id号 标题 链接 地区 地点 地铁站 人数 日期
对应的字段依次是:
id title link district bizcircle tagList onsale validdate
将数据进行清洗,缺失数据的全部不要

准备工作

数据:链接:https://pan.baidu.com/s/1vHbS7OkvrjcsQ0WhqaUKrw
提取码:aknp

// 实例化一个配置对象
    var conf = new SparkConf().setAppName("demo01").setMaster("local[*]")
    // 实例化SparkContext对象
    var sc = new SparkContext(conf)
    sc.setLogLevel("WARN")
    //读取文件
    var rdd: RDD[String] = sc.textFile("C:\\Users\\hasee\\Desktop\\4.8\\32道\\housedata.txt")

    val rdd2: RDD[Array[String]] = rdd.filter(_.split("\\t")(5) != "").map(x => x.split("\\t"))

计算出东花市北里有多少条信息

 val value2: RDD[Array[String]] = rdd2.filter(x => if (x(1).toString.contains("东花市北里")) true else false)
     println("2.东花市北里有" + value2.count() + "条信息")

计算出住在朝阳区的所有人数

 val value3 = rdd2.filter(x => if (x(3).toString.equals("朝阳")) true else false)
      var count3: Accumulator[Int] = sc.accumulator(0)
      value3.foreach(x => {
        count3 += x(6).toInt
      })
      println(s"3.朝阳区的所有人数为${count3}")

计算出住在朝阳区的人数和住在西城区的人数哪个区的多,多多少?

 // 4、计算出住在朝阳区的人数和住在西城区的人数哪个区的多,多多少?
       val value41 = rdd2.filter(x => if (x(3).toString.equals("朝阳")) true else false)
       var count41: Accumulator[Int] = sc.accumulator(0)
       value41.foreach(x => {
         count41 += x(6).toInt
       })
       val value42 = rdd2.filter(x => if (x(3).toString.equals("西城")) true else false)
       var count42: Accumulator[Int] = sc.accumulator(0)
       value42.foreach(x => {
         count42 += x(6).toInt
       })

       def max4(x: Int, y: Int): Unit = {
         if (x > y)
           println(s"4.朝阳比西城人多出${x - y}")
         else
           println(s"4.西城比朝阳人多出${y - x}")
       }

       max4(count41.value, count42.value)

计算出标题中含有胡同的所有租户有多少人


       //    5、计算出标题中含有胡同的所有租户有多少人
    val value5 = rdd2.filter(x => if (x(1).toString.contains("胡同")) true else false)
      var count5: Accumulator[Int] = sc.accumulator(0)
      value5.foreach(x => {
        count5 += x(6).toInt
      })
      println("5.标题中含有胡同的人数为" + count5.value)

计算出地铁1号线的租户有多少人?

//    6、计算出地铁1号线的租户有多少人?
       val value6 = rdd2.filter(x => if (x(5).toString.contains("1号")) true else false)
     var count6: Accumulator[Int] = sc.accumulator(0)
     value6.foreach(x => {
       count6 += x(6).toInt
     })
     println("6.地铁1号线的人数为" + count6.value)

计算出东城区王府井站有多少人?

//    7、计算出东城区王府井站有多少人?
     val value7 = rdd2.filter(x => if (x(3).toString.equals("东城") && x(5).toString.contains("王府井站")) true else false)
     var count7: Accumulator[Int] = sc.accumulator(0)
     value7.foreach(x => {
       count7 += x(6).toInt
     })
     println("7.东城区王府井站的人数为" + count7.value)

计算出所有地区的人数有多少?

 8、计算出所有地区的人数有多少?
    var count8: Accumulator[Int] = sc.accumulator(0)
    rdd2.foreach(x => {
      count8 += x(6).toInt
    })
    println("8.所有地区的人数为" + count8.value)

计算出各个地区的平均人数是多少?

//    9、计算出各个地区的平均人数是多少?
      var count9: Accumulator[Int] = sc.accumulator(0)
     //求出每个地区的人数
     val rdd9: RDD[(String, Iterable[Int])] = rdd2.map(x => (x(3), x(6).toInt)).groupByKey()
     rdd9.foreach(x => {
       count9 += x._2.sum
     })
     println("9.各个地区的平均人数是: " + count9.toString().toInt / rdd9.count())

计算出地铁15号线比地铁1号线的人数多多少?

 //    10、计算出地铁15号线比地铁1号线的人数多多少?
     var count101: Accumulator[Int] = sc.accumulator(0)
     var count102: Accumulator[Int] = sc.accumulator(0)
     rdd2.foreach(x => {
       if (x(5).startsWith("近地铁15号")) {
         count101 += x(6).toInt
       } else if (x(5).startsWith("近地铁1号")) {
         count102 += x(6).toInt
       }
     })
     println(s"10. 15号线比1号线多: ${count101.toString().toInt - count102.toString().toInt}")

计算出人数最多的前三个地区

//依次是:数据id号 	标题 	链接	地区	地点	地铁站	人数	日期
     // 11、计算出人数最多的前三个地区
    val rdd11: RDD[(String, Int)] = rdd2.map(x => (x(3), x(6).toInt)).reduceByKey(_ + _)
    val resultSort: RDD[(String, Int)] = rdd11.sortBy(_._2, false)
    val finalResultSort: Array[(String, Int)] = resultSort.take(3)
    println("11.计算出人数最多的前三个地区")
    finalResultSort.foreach(println)

计算出13号线的那个站下的人最多?

 //    12、计算出13号线的哪个站下的人最多?
     val rdd12 = rdd2.filter(x => if (x(5).toString.contains("13号")) true else false)
     val value12: RDD[(String, Int)] = rdd12.map(x => (x(5), x(6).toInt)).reduceByKey(_ + _)
     val resultSort12: RDD[(String, Int)] = value12.sortBy(_._2, false)
     val finalResultSort12: Array[(String, Int)] = resultSort12.take(1)
     println("12. 13号线的人数最多的站" + finalResultSort12(0))

计算出望京地点14号线和15号线的下车总人数是多少?

 //    13、计算出望京地点14号线和15号线的下车总人数是多少?
     val rdd13 = rdd2.filter(x => if (x(4).toString.contains("望京")&&(x(5).toString.contains("14号")||x(5).toString.contains("15号"))) true else false)
     var count13: Accumulator[Int] = sc.accumulator(0)
     rdd13.foreach(x=>{
       count13+=x(6).toInt
     })
     println("13、计算出望京地点14号线和15号线的下车总人数为"+count13.value)

计算出望京地点14号线占所有14号地铁站的人数比?

 //    14、计算出望京地点14号线占所有14号地铁站的人数比?
     val rdd141 = rdd2.filter(x => if ((x(5).toString.contains("14号"))) true else false)
     var count141: Accumulator[Int] = sc.accumulator(0)
     rdd141.foreach(x=>{
       count141+=x(6).toInt
     })

     val rdd142 = rdd2.filter(x => if (x(4).toString.contains("望京")&&(x(5).toString.contains("14号"))) true else false)
     var count142: Accumulator[Int] = sc.accumulator(0)
     rdd142.foreach(x=>{
       count142+=x(6).toInt
     })

     val d: Double = count142.value.toDouble / count141.value.toDouble
     val str: String = d.formatted("%.2f")
     println("14. 望京地点14号线占所有14号地铁站的人数比是"+str )

计算出亚运村地点的人数和广渠门的人数总和?

//    15、计算出亚运村地点的人数和广渠门的人数总和?
     val rdd15 = rdd2.filter(x => if (x(4).toString.contains("亚运村")||(x(4).toString.contains("广渠门"))) true else false)
     var count15: Accumulator[Int] = sc.accumulator(0)
     rdd15.foreach(x=>{
       count15+=x(6).toInt
     })
     println("15.亚运村地点的人数和广渠门的人数总和为"+count15.value)

计算出每个地区的地点人数最多的前3名?

 //依次是:数据id号 	标题 	链接	地区	地点	地铁站	人数	日期
     //    16、计算出每个地区的地点人数最多的前3名?
     val rdd16: RDD[(String, Int)] = rdd2.map(x => ((x(3),x(6).toInt)))

     val groups: RDD[(String, Iterable[Int])] = rdd16.groupByKey()

     val groupedTop3: RDD[(String, List[Int])] = groups.map(grouped => {
       (grouped._1, grouped._2.toList.sortWith(_ > _).take(3))
     })
     println("16、计算出每个地区的地点人数最多的前3名")
     groupedTop3.collect().foreach(x=>{
       println(x._1+":")
       x._2.foreach { println }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43563705

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值