Spark数据分析及处理(实战分析)

本文介绍了如何使用Spark进行日志数据清洗,包括读取日志文件、过滤无效数据、去重、URL切割,并将清洗后的数据存入MySQL数据库。通过分析日志,过滤状态码非200和event_time为空的记录,最后详细展示了数据处理的各个步骤。
摘要由CSDN通过智能技术生成

项目需求:使用Spark完成下列日志分析项目需求:
1.日志数据清洗
2.用户留存分析

1.数据清洗

读入日志文件并转化为RDD[Row]类型

  • 按照Tab切割数据
  • 过滤掉字段数量少于8个的

对数据进行清洗

  • 按照第一列和第二列对数据进行去重
  • 过滤掉状态码非200
  • 过滤掉event_time为空的数据
  • 将url按照”&”以及”=”切割

保存数据

  • 将数据写入mysql表中

代码分析如下:
日志如下图片,分析日志,处理需求
在这里插入图片描述

   //spark操作外部数据
    val spark = SparkSession.builder()
      .master("local[*]")
      .appName("clear").getOrCreate()
    val sc = spark.sparkContext
    import spark.implicits._
    //将工作中的要分析的日志导入到spark中
    val linesRdd = sc.textFile("D:\\360Downloads\\scala\\test.log")
//    println(linesRdd.count())
    //需求1:按空格切分
    val line1 = linesRdd.map(x=>x.split("\t"))
    //需求2:过滤掉字段数量少于8个的
    val rdd = line1.filter(x => x.length == 8).map(x =>Row (x(0).trim, x(1).trim //trim去除两边空格的作用
      , x(2).trim, x(3).trim,
      x(4).trim, x(5).trim,
      x(6).trim, x(7).trim))
//    rdd.collect().foreach(println)
   //处理成数据表的形式
    val schema = StructType(Array(
      StructField("event_time", StringType),
      StructField("url", StringType),
      StructField("method", StringType),
      StructField("status", StringType),
      StructField("sip", StringT
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值