【Spark】(十三)Spark数据分析及处理

这篇博客详细介绍了如何使用Spark进行数据清洗和用户留存分析。首先,通过读取日志文件,进行数据清洗,包括字段去重、状态码过滤、时间戳处理等。然后,将清洗后的数据存入MySQL。接着,展示了用户留存率的计算方法,包括次日留存率和次周留存率,涉及到注册用户和登录用户信息的处理及时间戳转换。
摘要由CSDN通过智能技术生成

用例一:数据清洗

基本步骤:

  • 1、读入日志文件并转化为RDD[Row]类型
    按照Tab切割数据
    过滤掉字段数量少于8个的
  • 2、对数据进行清洗
    按照第一列和第二列对数据进行去重
    过滤掉状态码非200
    过滤掉event_time为空的数据
    将url按照”&”以及”=”切割
  • 3、保存数据
    将数据写入mysql表中

日志拆分字段:
event_time
url
method
status
sip
user_uip
action_prepend
action_client

如下是日志中的一条数据按照Tab分隔后的示例,每一行代表一个字段,分别以上一一对应
在这里插入图片描述

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

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

val spark = SparkSession.builder().master("local[*]")
      .appName("DataClear").getOrCreate()
val sc = spark.sparkContext
import spark.implicits._
val linesRdd = sc.textFile("in/test.log")

//按照Tab切割数据
// 过滤掉字段数量少于8个的
val rdd = linesRdd.map(x=>x.split("\t"))
      .filter(x => x.length == 8)
      .map(x => Row(x(0).trim,x(1).trim,x(2).trim,x(3).trim,x(4).trim,x(5).trim,x(6).trim,x(7).trim))
val schema = StructType(
	 Array(
        StructField("event_time", StringType,false),
        StructField("url", StringType,false),
        StructField("method", StringType,false),
        StructField("status", StringType,false),
        StructField("sip", StringType,false),
        StructField("user_uip", StringType,false),
        StructField("action_prepend", StringType,false),
        StructField("action_client", StringType,false)
	)
)
val orgDF = spark.createDataFrame(rdd,schema)

在这里插入图片描述

2、对数据进行清洗

按照第一列和第二列对数据进行去重
过滤掉状态码非200
过滤掉event_time为空的数据

 // 按照第一列和第二列对数组进行去重; 过滤掉状态码非200; 过滤掉event_time为空的数据
val ds1 = orgDF.dropDuplicates("event_time", "url")
	.filter(x => x(3) == "200")
	.filter(x => StringUtils.isNotEmpty(x(0).toString))

将url按照”&”以及”=”切割

//先将url按照”?”切割
val dfDetail = ds1.map(row =></
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值