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

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)

  }


}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设你已经安装好了Spark和Scala,并且已经配置好了数据库的连接信息。下面是一个SparkSQL和Scala交互的例子,用于在数据库中查询数据。 首先,我们需要创建一个SparkSession对象: ```scala import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .appName("SparkSQLExample") .master("local[*]") .getOrCreate() ``` 接下来,我们需要使用SparkSession对象来创建一个DataFrame,然后可以使用DataFrame API或SparkSQL来查询数据。下面是一个使用DataFrame API进行查询的例子: ```scala import org.apache.spark.sql.functions._ val df = spark.read.format("jdbc") .option("url", "jdbc:mysql://localhost:3306/mydatabase") .option("driver", "com.mysql.jdbc.Driver") .option("dbtable", "mytable") .option("user", "myuser") .option("password", "mypassword") .load() df.select("column1", "column2") .filter(col("column3") > 10) .show() ``` 上面的代码会从数据库中读取格“mytable”,然后选择“column1”和“column2”这两列,并且过滤掉“column3”大于10的行。最后,结果会以格的形式显示出来。 下面是一个使用SparkSQL进行查询的例子: ```scala df.createOrReplaceTempView("mytable") val result = spark.sql("SELECT column1, column2 FROM mytable WHERE column3 > 10") result.show() ``` 上面的代码会将DataFrame“df”注册为一个临时格“mytable”,然后使用SparkSQL查询这个格,并过滤掉“column3”大于10的行。最后,结果会以格的形式显示出来。 以上就是一个SparkSQL和Scala交互在数据库中查询的例子。你可以根据实际情况进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值