项目需求:使用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