scala案例:平均温度案例和用户表和用户订单表的join案例

本文介绍使用Scala进行数据处理的两个案例:一是计算不同地区平均气温的方法;二是通过用户ID关联用户订单表和用户表,实现数据整合。

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

1. 平均温度案例:

1.1 需求:求出各个地区的平均温度

1.2 代码实现:

package com.zxx.fuxiday05

object AvgTemp {
  def main(args: Array[String]): Unit = {
    //数据
    val d1 = Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 33.1))
    val d2 = Array(("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3))
    val d3 = Array(("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.1))
//需求,求各个地区的平均温度
    //先将这三个集合合并为一个集合
    val array: Array[(String, Double)] = d1.union(d2).union(d3)
    //将集合中的元素按照K 进行分组
    val map1: Map[String, Array[(String, Double)]] = array.groupBy(_._1)
    //遍历集合,求同一个地区的平均温度
    var res=0
    val stringToList: Map[String, List[(String, Double)]] = map1.map(e => {
      (e._1, e._2.toList)
    })
    stringToList.mapValues(e=>{
      val length = e.length
      val d = e.reduce((a1, a2) =>(a1._1, a1._2 + a2._2))
      d._2/length
    }).foreach(println)

    /**中途过程展示
     * (shenzhen,List((shenzhen,33.1), (shenzhen,32.1)))
     * (shanghai,List((shanghai,28.7), (shanghai,30.1), (shanghai,29.1)))
     * (guangzhou,List((guangzhou,32.0), (guangzhou,33.3), (guangzhou,32.0)))
     * (beijing,List((beijing,28.1), (beijing,27.3), (beijing,28.2)))
     */
//结果展示
    /**
     * (shenzhen,32.6)
     * (shanghai,29.3)
     * (guangzhou,32.43333333333333)
     * (beijing,27.86666666666667)
     */




  }

}

 

 2.  用户订单表和用户表案例:

2.1 需求:将商品表和用户表通过用户id来将这两张表关联起来

2.2 数据准备:

用户订单表:

order001,u006
order002,u006
order003,u005
order004,u006
order005,u003
order006,u002

用户订单表:

u001,senge,18,male,angelababy
u002,,58,male,ruhua
u003,shuaishuai,16,female,chunge
u004,laoyang,28,female,zengge
u005,nana,24,female,huangbo
u006,dingding,19,male,taojiji

2.3 代码实现

package com.zxx.fuxiday05

import java.io.File
import scala.io.Source

object JoinDemo {
  def main(args: Array[String]): Unit = {
    //先读取订单文件
    val orderList = Source.fromFile(new File("E:\\java_project\\lineproject\\Data\\order.txt")).getLines().map(_.split(",").toList)
    //读取用户订单文件
    val userList = Source.fromFile(new File("E:\\java_project\\lineproject\\Data\\user.txt")).getLines().map(_.split(",").toList)
    //先将商品订单中的两个元素互换位置
    var res = orderList.map(e => {
      List(e(1), e(0))
    })
    //将商品订单和用户订单合并为一个集合
    val finList = res ++ userList
    //List((u002,order006))
    // List(u001, senge, 18, male, angelababy)
    //List(u002, , 58, male, ruhua)
    val map: Map[String, List[List[String]]] = finList.toList.groupBy(e => e(0))
    val res2 = map.map(e => {
      val flatten = e._2.flatten
      flatten
    })
    res2.toList.map(e => {
      e.distinct
    }).foreach(println)
    //结果展示
    /*  List(u002, order006, , 58, male, ruhua)
        List(u003, order005, shuaishuai, 16, female, chunge)
        List(u004, laoyang, 28, female, zengge)
        List(u001, senge, 18, male, angelababy)
        List(u005, order003, nana, 24, female, huangbo)
        List(u006, order001, order002, order004, dingding, 19, male, taojiji)*/
    //商品订单
    /*List(order001, u006)
    List(order002, u006)
    List(order003, u005)
    List(order004, u006)
    List(order005, u003)
    List(order006, u002)*/
    //List(u002, , 58, male, ruhua)
    //    用户订单
    /*  List(u001, senge, 18, male, angelababy)
        List(u002, , 58, male, ruhua)
        List(u003, shuaishuai, 16, female, chunge)
        List(u004, laoyang, 28, female, zengge)
        List(u005, nana, 24, female, huangbo)
        List(u006, dingding, 19, male, taojiji)*/
    //    最后的集合展示
    //List((u006,order001))
    //List((u006,order002))
    //List((u005,order003))
    //List((u006,order004))
    //List((u003,order005))
    //List((u002,order006))
    //List(u001, senge, 18, male, angelababy)
    //List(u002, , 58, male, ruhua)
    //List(u003, shuaishuai, 16, female, chunge)
    //List(u004, laoyang, 28, female, zengge)
    //List(u005, nana, 24, female, huangbo)

  }


}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值