网站用户行为分析项目之会话切割(六)=> 参数配置化

2023-11-22 02:32

本文主要是介绍网站用户行为分析项目之会话切割(六)=> 参数配置化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。
1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员…
2、这几年,我整理了很多IT技术相关的教程给大家,主要是大数据教程,帮助了很多小伙伴入坑大数据行业。
3、如果您觉得文章有用,请收藏,转发,评论,并关注我,谢谢!
博客导航跳转(请收藏):邵奈一的技术博客导航
| 公众号 | 微信 | 微博 | CSDN | 简书 |


教程目录

  • 0x00 教程内容
  • 0x01 运行模式配置化
  • 0x02 路径配置化
  • 0x03 输出类型配置化
  • 0xFF 总结

0x00 教程内容

  1. 运行模式配置化
  2. 路径配置化
  3. 输出类型配置化

注意:以下代码均在 SessionCutETL 中修改。

0x01 运行模式配置化

目前我们是在本地运行的,如果是放到集群运行,则需要修改相应的代码,如果在本地测试,又要加上之前的代码,非常不方便。于是,我们可以给运行的模式加上参数适配。

(1)给设置运行模式加上判断条件:

conf.setMaster("local")
//修改为:
if(!conf.contains("spark.master")) {conf.setMaster("local")
}

0x02 路径配置化

目前我们的路径都是写死在代码里的,我们应该进行参数化处理,如果有传参数则使用传参的值,如果没有,则使用默认值。

(1)添加以下四行代码,并且需要修改代码里的路径:

// 通过配置拿到我们配置的输入和输出路径
val visitLogsInputPath = conf.get("spark.sessioncut.visitLogsInputPath", "data/rawdata/visit_log.txt")
val cookieLabelInputPath = conf.get("spark.sessioncut.cookieLabelInputPath", "data/cookie_label.txt")
val baseOutputPath = conf.get("spark.sessioncut.baseOutputPath", "data/output")

0x03 输出类型配置化

目前我们是直接把输出类型在代码中写死的,需要改进。
(1)添加一行代码,并修改代码里的字符串:

val outputFileType = if (args.nonEmpty) args(0) else "text"
// 修改输出代码为:
// text & parquet
OutputComponent.fromOutputFileType(outputFileType).writeOutputData(sc,baseOutputPath, parsedLogRDD, cookieLabeledSessionRDD)

完整代码如下:
(2)SessionCutETL 的完整代码如下:

package com.shaonaiyi.sessionimport com.shaonaiyi.spark.session.{TrackerLog, TrackerSession}
import org.apache.spark.rdd.RDD
import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}/*** @Auther: shaonaiyi@163.com* @Date: 2019/9/12 10:09* @Description: 会话切割的程序主入口*/
object SessionCutETL {private val logTypeSet = Set("pageview", "click")def main(args: Array[String]): Unit = {var conf = new SparkConf()conf.setAppName("SessionCutETL")if(!conf.contains("spark.master")) {conf.setMaster("local")}conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")var sc = new SparkContext(conf)// 通过配置拿到我们配置的输入和输出路径val visitLogsInputPath = conf.get("spark.sessioncut.visitLogsInputPath", "data/rawdata/visit_log.txt")val cookieLabelInputPath = conf.get("spark.sessioncut.cookieLabelInputPath", "data/cookie_label.txt")val baseOutputPath = conf.get("spark.sessioncut.baseOutputPath", "data/output")val outputFileType = if (args.nonEmpty) args(0) else "text"//网站域名标签数据,此处只是演示,其实可以存放在数据库里val domainLabelMap = Map("www.baidu.com" -> "level1","www.taobao.com" -> "level2","jd.com" -> "level3","youku.com" -> "level4")//广播val domainLabelMapB = sc.broadcast(domainLabelMap)// 1、加载日志源数据val rawRDD: RDD[String] = sc.textFile(visitLogsInputPath)//2、解析rawRDD中每一行日志源数据val parsedLogRDD: RDD[TrackerLog] = rawRDD.flatMap( line => RawLogParserUtil.parse(line)).filter(trackerLog => logTypeSet.contains(trackerLog.getLogType.toString))//缓存parsedLogRDDparsedLogRDD.persist(StorageLevel.MEMORY_AND_DISK)//3、按照cookie进行分组,一个cookie及一个userval cookieGroupRDD: RDD[(String, Iterable[TrackerLog])] = parsedLogRDD.groupBy(trackerLog => trackerLog.getCookie.toString)//4、生成会话RDDval sessionRDD: RDD[(String, TrackerSession)] = cookieGroupRDD.flatMapValues { case iter =>//处理每个user的日志val processor = new OneUserTrackerLogsProcessor(iter.toArray)
//      val processor = new OneUserTrackerLogsProcessor(iter.toArray) with PageviewSessionGeneratorprocessor.buildSessions(domainLabelMapB.value)}//5、给会话的cookie打标签val cookieLabelRDD: RDD[(String, String)] = sc.textFile(cookieLabelInputPath).map { case line =>val temp = line.split("\\|")(temp(0), temp(1)) // (cookie, cookie_label)}val joinRDD: RDD[(String,(TrackerSession, Option[String]))] = sessionRDD.leftOuterJoin(cookieLabelRDD)val cookieLabeledSessionRDD: RDD[TrackerSession] = joinRDD.map {case (cookie, (session, cookieLabelOpt)) =>if (cookieLabelOpt.nonEmpty) {session.setCookieLabel(cookieLabelOpt.get)} else {session.setCookieLabel("-")}session}//text & parquetOutputComponent.fromOutputFileType(outputFileType).writeOutputData(sc,baseOutputPath, parsedLogRDD, cookieLabeledSessionRDD)sc.stop()}}

0xFF 总结

  1. 网站用户行为分析项目系列:
    网站用户行为分析项目之会话切割(一)
    网站用户行为分析项目之会话切割(二)
    网站用户行为分析项目之会话切割(三)
    网站用户行为分析项目之会话切割(四)
    网站用户行为分析项目之会话切割(五)
    网站用户行为分析项目之会话切割(六)
  2. 下一篇文章我们会打包我们的代码放到集群去运行。

邵奈一 原创不易,如转载请标明出处,教育是一生的事业。


这篇关于网站用户行为分析项目之会话切割(六)=> 参数配置化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406848

相关文章

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.