第三次作业-用scala写一个wordcount程序

本文介绍使用Scala实现WordCount程序的三种方法,并详细展示了如何结合scalikeJDBC进行MySQL数据库操作,包括数据增删改查等关键步骤。

第一:用scala写一个wordcount程序


package com.scala.wordcount
object wordcountApp {
def main(args: Array[String]): Unit = {
     //造一个List,模拟读取文件
val wordlist= List("hello scala","hello word","scala word","apple banana","spark scala")
//第一种方法
       val wc=wordlist.flatMap(_.split(" "))
                    .map((_,1))
                    .groupBy(_._1)
                    .mapValues(_.size)
                    .toList.sortBy(_._2).reverse

  for(ele<-wc) println(ele)

//第二种方法 flatMap运行结果与map().flatten.toList结果一样

val wc1 = wordlist.map(_.split(" ")).flatten.toList

val wc2 = wordlist.flatMap(_.split(" "))
                    .map((_,1))
                    .groupBy(_._1)
                    .map(t=>(t._1,t._2.size))
                    .toList.sortBy(_._2)
                    .reverse

//println("***************************")

//for(ele<-wc1) println(ele)

println("***************************")

for(e<-wc2) println(e)
println("***************************")

//第三种方法val wc3 = wordlist.flatMap(_.split(" "))
                  .map((_,1))
                  .groupBy(_._1)
                  .mapValues(_.foldLeft(0)(_+_._2))
                  .toList.sortBy(_._2).reverse
for(e<-wc3) println(e) }}

第二:用scala结合scalikeJDBC操作MySQL数据库

**1.在idea中创建一个scala+maven的project**
2.引入相关包
***<!--引入scalikejdbc依赖-->

<dependency>
  <groupId>org.scalikejdbc</groupId>
  <artifactId>scalikejdbc_2.11</artifactId>
  <version>3.3.1</version>
</dependency>
<dependency>
  <groupId>org.scalikejdbc</groupId>
  <artifactId>scalikejdbc-core_2.11</artifactId>
  <version>3.3.1</version>
</dependency>
<dependency>
  <groupId>org.scalikejdbc</groupId>
  <artifactId>scalikejdbc-config_2.11</artifactId>
  <version>3.3.1</version>
</dependency>

<!--引入mysql-connector-java依赖-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.45</version>
</dependency>***

2.在resources文件夹里创建application.conf

MySQL example

   db.default.driver="com.mysql.jdbc.Driver"
   db.default.url="jdbc:mysql://localhost/scalikejdbc"
   db.default.user="root"
   db.default.password="*********"

3.参考官方的文档coding

package com.scala.jdbc

import scalikejdbc._

case class Employee(id:Int,name:String,age:Int,department:String,salary:Long)

object ScalikeJDBC {

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

 //解析应用程序的conf文件
    scalikejdbc.config.DBs.setupAll()

//创建有三个Employee
val em = new Employee(1,"XiaoMIn",23,"DataCenter",12000)

val em1 = new Employee(2,"XiaoXiong",23,"DataCenter",42000)

val em2 = new Employee(3,"XiaoHua",23,"DataCenter",23000)

   //将创建的Employee放入List
    val employeeList:List[Employee]=List(em,em1,em2)

//增加数据

println("增加新数据")

println("增加新数据"+addDataAndbathchSave(employeeList))

var emp1 = selectData()

for(emp<-emp1) {

  //println(emp)

  println("id:"+emp.id+"\tname:"+emp.name+"\tage:"+emp.age+"\tdepartment:"+emp.department+"\tsalary:"+emp.salary)

  if(emp.id ==emp1.size) return
}


}


//增加并保存数据
  def addDataAndbathchSave(employees: List[Employee]): Unit = {

DB.localTx { implicit session =>

  for (emp <- employees) {
    SQL("insert into Employee(id,name,age,department,salary) values(?,?,?,?,?)")
      .bind(emp.id, emp.name, emp.age, emp.department, emp.salary).update().apply()
  }
}

}
//根据ID删除Data
def removeByID(id:Int): Unit ={

  DB.autoCommit{ implicit session=>{

    SQL("delete from Employee where is = ?").bind(id).update().apply()

  }

  }
}

//更新salary数据和部门数据通过id

def updateSalaryByID(id:Int,salary:Long): Unit ={

  DB.autoCommit{ implicit session =>{

    SQL("UPDATE Employee SET salary=? WHERE id = ? ").bind(id,salary).update().apply()

  }

  }
}

//查找数据

def selectData():List[Employee] = {

  DB.readOnly{ implicit session=>{

    SQL("SELECT * FROM Employee").map(results=>Employee(results.int("id"),
      results.string("name"),results.int("age"),results.string("department"),
      results.long("salary"))).list().apply()
  }

  }
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值