使用工具:IDEA
Scala版本:2.12.15
日志可以到这里下载:testlog7.log-spark文档类资源-CSDN下载
也可以用代码生成:Scala模拟日志生成_一个人的牛牛的博客-CSDN博客
一定要在数据库中建表!!!!!
import java.sql.{Connection, DriverManager, PreparedStatement}
import org.apache.spark.{SparkConf, SparkContext}
//MySQL表,www是表名
case class www(
www: String, //列名,数据格式String
count: Int //列名,数据格式Int
)
object Www {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local").setAppName("Count")
val sc = new SparkContext(conf);
//导入日志数据
val data = sc.textFile("F:Scala\\test\\bighomework\\testlog7.log")
//数据处理
val webcount = data.map{line=>
val web = line.split("_")(5) //用“_”下划线分割,5是想要的数据的位置
(web)}.map((_,1)) //map
.reduceByKey(_+_) //reduce累加
.sortBy(_._2, false) //倒序排序
.collect() //收集数据
.take(5) //输出前5
//.foreach(println(_)) //没有写人MySQL的话用来输出
sc.stop()
println("yes")
webcount.foreach(
rdd=>{
val url = "jdbc:mysql://192.168.17.140:3306/hive?useUnicode=true&characterEncoding=UTF-8"
//192.168.17.140是我的主机IP地址,可以用localhost。hive是我的数据库名
val user = "root" //MySQL用户名
val password = "123456789" //MySQL密码
Class.forName("com.mysql.jdbc.Driver").newInstance()
var conn: Connection = DriverManager.getConnection(url,user,password)
val sql = "insert into www(www,count) values(?,?)"
//第一个www是表名,(www,count)是列名
var stmt : PreparedStatement = conn.prepareStatement(sql)
stmt.setString(1,rdd._1.toString)
stmt.setString(2,rdd._2.toString)
stmt.executeUpdate()
conn.close()
//输出结果
println("yes I get it!!!!")
webcount.foreach(println(_))
}
)
}
}
谢谢!!!