Spark Core实战-将Tomcat日志分析的结果写入mysql数据库

1.Tomcat日志和前面一样
2.需求:

将Tomcat日志分析的结果:jps的名称和个数统计,并插入mysql数据库

3.在mysql(本地,我的是MacOS)中建库建表:
create database company;

create table mydata(
          jsname varchar(50),
          countNumber int(11));

4.编写代码:
(1)添加pom依赖:
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.0</version>
        </dependency>
(2)在项目中加入JDBC驱动包

JDBC驱动包

(3)MyTomcatLogCountToMysql.scala
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import java.sql.Connection
import java.sql.PreparedStatement
import java.sql.DriverManager


object MyTomcatLogCountToMysql {

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

    //创建Spark对象
    val conf = new SparkConf().setMaster("local").setAppName("My Tomcat Log Count To Mysql")
    val sc = new SparkContext(conf)

    /**
     * 读入日志,解析,找到访问jsp网页
     * 192.168.88.1 - - [30/Jul/2017:12:54:42 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
     */

    val rdd1 = sc.textFile("/users/macbook/TestInfo/localhost_access_log.txt")
      .map(
        /**
         * 找到网页名字
         *
         * 并计数
         *
         * line 代表读进来的每一行数据
         */

        line => {
          //解析字符串,找到jsp名字
          //得到两个双引号之间的东西
          val index1 = line.indexOf("\"")
          val index2 = line.lastIndexOf("\"")
          val line1 = line.substring(index1 + 1, index2) // GET /MyDemoWeb/web.jsp HTTP/1.1

          //得到两个空格之间的东西
          val index3 = line1.indexOf(" ")
          val index4 = line1.lastIndexOf(" ")
          val line2 = line1.substring(index3 + 1, index4) // /MyDemoWeb/web.jsp

          //得到jsp的名字
          val jspName = line2.substring(line2.lastIndexOf("/") + 1)

          (jspName, 1)
        })

    rdd1.foreachPartition(saveToMysql)

    sc.stop()
  }

  //定义一个函数 针对分区进行操作
  def saveToMysql(it: Iterator[(String, Int)]) = {

    var conn: Connection = null
    var pst: PreparedStatement = null

    //创建连接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?serverTimezone=UTC&characterEncoding=utf-8", "root", "123456")

    //把数据保存到mysql中
    pst = conn.prepareStatement("insert into mydata values (?,?) ")

    it.foreach(data => {
      pst.setString(1, data._1)
      pst.setInt(2,data._2)
      pst.executeUpdate()
    })

  }

}
5.结果:

1
2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您解答。首先,我们需要使用Spark的RDD编程模式来进行计算。假设我们有一个包含John同学的成绩信息的RDD,其中每个元素包含了科目和分数两个属性。我们可以使用如下代码来计算John同学的总成绩和总科目数: ```python # 假设我们的RDD为scores_rdd john_scores_rdd = scores_rdd.filter(lambda x: x[0] == 'John') # 过滤出John同学的成绩信息 total_score = john_scores_rdd.map(lambda x: x[1]).reduce(lambda x, y: x + y) # 计算总成绩 num_subjects = john_scores_rdd.count() # 计算总科目数 ``` 接下来,我们可以使用Python的MySQL驱动程序来将计算结果写入MySQL数据库。假设我们已经连接到了数据库,并创建了一个名为`john_scores`的数据表,其中包含两个字段`total_score`和`num_subjects`。我们可以使用如下代码来将计算结果写入数据库: ```python import mysql.connector # 假设我们已经连接到了MySQL数据库,并创建了一个名为'john_scores'的数据表 # 创建MySQL连接 cnx = mysql.connector.connect(user='your_username', password='your_password', host='your_host', database='your_database') cursor = cnx.cursor() # 插入计算结果到数据库 insert_query = ("INSERT INTO john_scores " "(total_score, num_subjects) " "VALUES (%s, %s)") data = (total_score, num_subjects) cursor.execute(insert_query, data) # 提交更改 cnx.commit() # 关闭连接 cursor.close() cnx.close() ``` 这样,我们就完成了使用Spark RDD编程计算John同学总成绩的平均分,并将结果写入MySQL数据库的过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值