源数据:https://pan.baidu.com/s/1rzEwBfR1m_lpZHekuEFnCg
提取码:tgpf
源码:https://pan.baidu.com/s/1mKiImFn3OePf5Jm8PIUi3Q
提取码:vxb7
使用Spark完成下列日志分析项目需求:
日志数据清洗
用户留存分析
活跃用户分析
活跃用户地域信息分析
用户浏览深度分析
数据清洗
1)读入日志文件并转化为RDD[Row]类型
按照Tab其人格数据
过滤掉字段数量少于8个的
val line1 = linesRDD.map(x => x.split("\t"))
val rdd = line1.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))
2)对数据进行清洗
按照第一列和第二列对数据进行去重
过滤掉状态码非200
过滤掉event_time为空的数据
将url按照"&“以及”="切割
val schema = StructType(
Array(
StructField("event_time", StringType),
StructField("url", StringType),
StructField("method", StringType),
StructField("status", StringType),
StructField("sip", StringType),
StructField("user_uip", StringType),
StructField("action_prepend", StringType),
StructField("action_client", StringType)
)
)
val orgDF = spark.createDataFrame(rdd, schema)
// df1.printSchema()
// df1.show(10,false)
//按照第一列和第二列对数据数据去重,过滤掉状态码非200,过滤掉event_time为空的数据
val ds1 = orgDF.dropDuplicates("event_time", "url")
.filter(x => x(3) == "200")
.filter(x => StringUtils.isNotEmpty(x(0).toString))
// ds1.show(10,false)
//将url按照"&"以及"="切割,即按照userUID
//userSID
//userUIP
//actionClient
//actionBegin
//actionEnd
//actionType
//actionPrepend
//actionTest
//ifEquipment
//actionName
//id
//progress进行切割
val dfDetail = ds1