首页 > 其他分享 >Scala练习题

Scala练习题

时间:2023-06-24 19:34:32浏览次数:46  
标签:练习题 03 12 String 22 Scala val 2018

SQL join语法案例

Data:

order.txt

order011,u001,300
order012,u002,200
order023,u006,100
order056,u007,300
order066,u003,500
order055,u004,300
order021,u005,300
order014,u001,100
order025,u005,300
order046,u007,30
order067,u003,340
order098,u008,310

user.txt

u001,hls,22,fengjie
u002,wangwu,31,lisi
u003,zhangyanru,22,tananpengyou
u004,laocao,26,fengyi
u005,mengqi,12,nvmengqi
u006,haolei,38,sb
u007,wanghongjing,24,wife
u009,wanghongjing,24,wife



返回一个结果:order011  u001   300  hls  22   fengjie

代码示例:

package com.doit.day03

import scala.io.{BufferedSource, Source}

object JoinDemo {
  def main(args: Array[String]): Unit = {

    //u001,hls,22,fengjie
    val bs1= Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\user.txt")/*.getLines().toList*/

    //order011,u001,300
    val bs2 = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\order.txt")/*.getLines().toList*/

    //实现left join
/*
    //将用户数据转换成map集合
    val users: Iterator[String] = bs1.getLines()
    val iters: Iterator[(String, (String, String, String, String))] = users.map(_.split(",", -1)).map(x => (x(0), (x(0), x(1), x(2), x(3))))
    val map: Map[String, (String, String, String, String)] = iters.toMap
    // 将订单数据转换成list集合
    val orders: Iterator[String] = bs2.getLines()
    val iters2: Iterator[(String, (String, String))] = orders.map(_.split(",", -1)).map(x => (x(1), (x(0), x(1))))
    val list2: List[(String, (String, String))] = iters2.toList

    //遍历每个订单  拼接用户信息
    var r = list2.map(x => {
      val user = map.getOrElse(x._1, ("null", "null", "null", "null"))
      (user._1, user._2, user._3, user._4, x._2._1)
    })
    // 打印结果
    r.sortBy(_._1).foreach(println)

    */

    //实现join
    /*
    val userTuple: List[(String, String, String, String)] = users.map(line => {
      val arr: Array[String] = line.split(",")
      //user_id,user_name,age,name
      (arr(0), arr(1), arr(2), arr(3))
    })

    val orderTuple: List[(String, String, String)] = orders.map(line => {
      val arr: Array[String] = line.split(",")
      //order_id  user_id   amount
      (arr(0), arr(1), arr(2))
    })

    //join关联条件是user_id = user_id

    for (user <- userTuple) {
      for (order <- orderTuple) {
        if(user._1 == order._2){
          println(user._1,user._2,user._3,user._4,order._1,order._3)
        }
      }
    }
*/
  }
}

pv,uv案例

数据:

site1,user1,2018-03-01 02:12:22
site1,user2,2018-03-05 04:12:22
site1,user2,2018-03-05 04:13:22
site1,user2,2018-03-05 04:14:22
site1,user2,2018-03-05 04:15:22
site4,user7,
site1,user2,2018-03-05 05:15:22
site1,user2,2018-03-05 08:15:22
site1,user3,2018-03-05 04:15:22
site1,user4,2018-03-05 05:15:22
site1,user3,2018-03-07 11:12:22
site1,user3,2018-03-08 11:12:22
site2,user4,2018-03-07 15:12:22
site3,user5,2018-03-07 08:12:22
site3,user6,2018-03-05 08:12:22
site1,user1,2018-03-08 11:12:22
site1,,2018-03-08 11:12:22
site2,user2,2018-03-07 15:12:22
site3,user5,2018-03-07 08:12:22
site3,user5,2018-03-07 18:12:22
site3,user6,2018-03-05 08:12:22
site4,user7,2018-03-03 10:12:22
site2,,2018-03-08 11:12:22
site3,user5,2018-03-07 08:12:22
site3,user6,2018-03-05 08:12:22
site4,user5,2018-03-03 10:12:22
site4,user7,2018-02-20 11:12:22

代码:

package com.doit.day03
import scala.io.{BufferedSource, Source}
/**
 * 需求:计算每天的pv和uv
 * pv:浏览次数
 * uv:访客数
 */
object PVUVDemo {
  def main(args: Array[String]): Unit = {

    val source: BufferedSource = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\pvuv.txt")

    val list: List[String] = source.getLines().toList

    //过滤一些脏数据
    val filtered: List[String] = list.filter(line => {
      val arr: Array[String] = line.split(",",-1)
      arr.length >= 0 && !arr.exists(_.isEmpty)
    })

    val events: List[(String, String, String)] = filtered.map(line => {
      val arr: Array[String] = line.split(",")
      val date: String = arr(2).substring(0, 10)
      //site1,user1,2018-03-01 02:12:22
      (arr(0), arr(1),date)
    })

    //pv:该页面被浏览了多少次
    val tuples: List[((String, String), String)] = events.map(tp => {
      ((tp._3, tp._1), tp._2)
    })

    val pv: Map[(String, String), Int] = tuples.groupBy(_._1).map(tp => (tp._1, tp._2.size))
    val uv: Map[(String, String), Int] = tuples.groupBy(_._1).map(tp => (tp._1, tp._2.distinct.size))
    println("============pv================")
    pv.foreach(println)
    println("============uv================")
    uv.foreach(println)
  }
}

线段重叠案例

data:

1,4
2,5
4,6
2,4
3,6
4,6
1,5

代码:

package com.doit.day03

import scala.io.Source

object LineDemo {
  def main(args: Array[String]): Unit = {

    val list: List[String] = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\line.txt").getLines().toList

    //生成一个个的点
    val points: List[Range.Inclusive] = list.map(line => {
      val arr: Array[String] = line.split(",")
      val start: String = arr(0)
      val end: String = arr(1)
      //按照起始得位置确定这一行中一共有哪些点,后面才能判断哪些点是重合的
      //根据开始和结束得点
      val range: Range.Inclusive = start.toInt to end.toInt
      range
    })

    //将点压平
    val flattened: List[Int] = points.flatten
    //对点分组
    val intToInts: Map[Int, List[Int]] = flattened.groupBy(point => point)
    //获取到最后的个数
    val res: Map[Int, Int] = intToInts.map(tp => (tp._1, tp._2.size))

    res.foreach(println)
  }
}

标签:练习题,03,12,String,22,Scala,val,2018
From: https://www.cnblogs.com/paopaoT/p/17501532.html

相关文章

  • Scala练习
    wordCountpackagecom.doit.day03importscala.io.{BufferedSource,Source}objectWordCountDemo{defmain(args:Array[String]):Unit={//读取文件,获取到一个Source对象valsource:BufferedSource=Source.fromFile("D:\\develop\\ideaWorkSpace\\......
  • scala异常和IO
    异常处理语法处理上和Java类似,但是又不尽相同。java的异常处理publicclassExceptionDemo{publicstaticvoidmain(String[]args){try{inta=10;intb=0;intc=a/b;}catch(ArithmeticExceptione){//catch时,需要将范围小的写到前面e.printSt......
  • Scala最新书籍-《函数式编程科学之Scala实战》pdf级随书代码分享
        这本书对函数式编程所需要的理论知识的系统性的阐述。本书从基本原理讲起,包含了所有详细地解释、推导和证明。读者需要通过长时间的精神集中和努力学习困难的概念。这本书需要一定的数学基础,至少对基础代数比较了解。        文末附本书最新pdf及随书代码下载地址......
  • Scala高阶语法
    高阶函数函数可以作为参数进行传递和返回值进行返回//传一个a乘b就返回一个函数,逻辑是实现两数相乘//传一个a*b返回一个函数,逻辑是实现两数相乘//传一个axb返回一个函数,逻辑是实现两数相乘deffunTest6(str:String,fun:(String)=>Int):(Int,Int)=>Int={vali:Int=......
  • MYSQL经典练习题
    题目来源:https://blog.csdn.net/flycat296/article/details/63681089Github地址:https://github.com/bladeXue/sql50添加测试数据库信息#创建数据库createdatabasesql50;usesql50;#学生表createtableStudent(SIdvarchar(10),Snamevarchar(10),Sagedatetime,Sse......
  • 什么时候选用OceanBase? OceanBase = transaction + scalability
    什么时候选择OceanBase?OceanBase能替代HBase,MongoDB吗?关于开源数据库OceanBase( http://oceanbase.taobao.org/ )的应用场景:如果你不需要事务(transaction),MongoDB等是不错的选择,如果你的数据量很大,HBase也是不错的选择;如果你需要事务(transaction),并且数据量不大,或者你可以......
  • C++练习题
    多态判断Q1:虚函数可以是内联的?A1:错误。内联是编译时刻决定的,虚函数是运行时刻动态决定的,所以虚函数不能是内联函数。虚函数前加上inline不会报错,但是会被忽略。Q2:一个类内部,可以同时声明staticvoidfun()和virutalvoidfun()两个函数?A2:错误。虽然静态函数......
  • Scala集合
    集合scala中的集合分为两种,可变集合和不可变集合,不可变集合可以安全的并发的访问!集合的类主要在一下两个包中可变集合包scala.collection.mutable不可变集合包scala.collection.immutable默认的Scala不可变集合,就是指该集合对象不可修改,每次修改就会返回一个......
  • Scala学习(二)条件控制与循环
    1、if语句:vara=20;varn=if(a>10)40else1;得到n=40 2、类型推断:if(a>40)40else"dsaf"返回的是父类型Anyif(a>10)40如果后面没有跟else语句,则默认返回Unit类型。相当于java中的void或null;上面的语句相当于if(a>10)40else()3、while循环varn=10......
  • Scala方法和函数
    方法和函数的作用几乎是一样的,但是函数在使用的过程中更加灵活和多样化scala中函数是头等公民.可以作为方法的返回值和参数使用scala是一个集面向对象和面向函数于一身的编程语言,灵活的函数是函数式编程的一种体现函数的使用使代码更加简洁和灵活函数scala中一种函数......