spark 大型项目实战(十九):用户访问session分析(十九) -- 聚合结果写入mysql

文章地址:http://www.haha174.top/article/details/253596
项目源码:https://github.com/haha174/spark-session.git
前文中一直在介绍如何进行session 过滤聚合,本篇介绍一下如何将过滤以后的结果写入mysql.
首先需要创建一个model 类便于进行数据操作

public class SessionAggrStat {
	private long taskid;
	private long session_count;
	private double visit_length_1s_3s_ratio;
	private double visit_length_4s_6s_ratio;
	private double visit_length_7s_9s_ratio;
	private double visit_length_10s_30s_ratio;
	private double visit_length_30s_60s_ratio;
	private double visit_length_1m_3m_ratio;
	private double visit_length_3m_10m_ratio;
	private double visit_length_10m_30m_ratio;
	private double visit_length_30m_ratio;
	
	private double step_length_1_3_ratio;
	private double step_length_4_6_ratio;
	private double step_length_7_9_ratio;
	private double step_length_10_30_ratio;
	private double step_length_30_60_ratio;
	private double step_length_60_ratio;
	public long getTaskid() {
		return taskid;
	}
	public void setTaskid(long taskid) {
		this.taskid = taskid;
	}
	public long getSession_count() {
		return session_count;
	}
	public void setSession_count(long session_count) {
		this.session_count = session_count;
	}
	public double getVisit_length_1s_3s_ratio() {
		return visit_length_1s_3s_ratio;
	}
	public void setVisit_length_1s_3s_ratio(double visit_length_1s_3s_ratio) {
		this.visit_length_1s_3s_ratio = visit_length_1s_3s_ratio;
	}
	public double getVisit_length_4s_6s_ratio() {
		return visit_length_4s_6s_ratio;
	}
	public void setVisit_length_4s_6s_ratio(double visit_length_4s_6s_ratio) {
		this.visit_length_4s_6s_ratio = visit_length_4s_6s_ratio;
	}
	public double getVisit_length_7s_9s_ratio() {
		return visit_length_7s_9s_ratio;
	}
	public void setVisit_length_7s_9s_ratio(double visit_length_7s_9s_ratio) {
		this.visit_length_7s_9s_ratio = visit_length_7s_9s_ratio;
	}
	public double getVisit_length_10s_30s_ratio() {
		return visit_length_10s_30s_ratio;
	}
	public void setVisit_length_10s_30s_ratio(double visit_length_10s_30s_ratio) {
		this.visit_length_10s_30s_ratio = visit_length_10s_30s_ratio;
	}
	public double getVisit_length_30s_60s_ratio() {
		return visit_length_30s_60s_ratio;
	}
	public void setVisit_length_30s_60s_ratio(double visit_length_30s_60s_ratio) {
		this.visit_length_30s_60s_ratio = visit_length_30s_60s_ratio;
	}
	public double getVisit_length_1m_3m_ratio() {
		return visit_length_1m_3m_ratio;
	}
	public void setVisit_length_1m_3m_ratio(double visit_length_1m_3m_ratio) {
		this.visit_length_1m_3m_ratio = visit_length_1m_3m_ratio;
	}
	public double getVisit_length_3m_10m_ratio() {
		return visit_length_3m_10m_ratio;
	}
	public void setVisit_length_3m_10m_ratio(double visit_length_3m_10m_ratio) {
		this.visit_length_3m_10m_ratio = visit_length_3m_10m_ratio;
	}
	public double getVisit_length_10m_30m_ratio() {
		return visit_length_10m_30m_ratio;
	}
	public void setVisit_length_10m_30m_ratio(double visit_length_10m_30m_ratio) {
		this.visit_length_10m_30m_ratio = visit_length_10m_30m_ratio;
	}

	
	
	public double getVisit_length_30m_ratio() {
		return visit_length_30m_ratio;
	}
	public void setVisit_length_30m_ratio(double visit_length_60m_ratio) {
		this.visit_length_30m_ratio = visit_length_60m_ratio;
	}
	public double getStep_length_1_3_ratio() {
		return step_length_1_3_ratio;
	}
	public void setStep_length_1_3_ratio(double step_length_1_3_ratio) {
		this.step_length_1_3_ratio = step_length_1_3_ratio;
	}
	public double getStep_length_4_6_ratio() {
		return step_length_4_6_ratio;
	}
	public void setStep_length_4_6_ratio(double step_length_4_6_ratio) {
		this.step_length_4_6_ratio = step_length_4_6_ratio;
	}
	public double getStep_length_7_9_ratio() {
		return step_length_7_9_ratio;
	}
	public void setStep_length_7_9_ratio(double step_length_7_9_ratio) {
		this.step_length_7_9_ratio = step_length_7_9_ratio;
	}
	public double getStep_length_10_30_ratio() {
		return step_length_10_30_ratio;
	}
	public void setStep_length_10_30_ratio(double step_length_10_30_ratio) {
		this.step_length_10_30_ratio = step_length_10_30_ratio;
	}
	public double getStep_length_30_60_ratio() {
		return step_length_30_60_ratio;
	}
	public void setStep_length_30_60_ratio(double step_length_30_60_ratio) {
		this.step_length_30_60_ratio = step_length_30_60_ratio;
	}
	public double getStep_length_60_ratio() {
		return step_length_60_ratio;
	}
	public void setStep_length_60_ratio(double step_length_60_ratio) {
		this.step_length_60_ratio = step_length_60_ratio;
	}

下面编写dao类用于插入数据

public class SessionAggrStatDAOImpl implements ISessionAggrStatDAO {
    @Override
    public void insert(SessionAggrStat sessionAggrStat) {
        SessionFactory sessionFactory=SessionFactory.getSessionFactory ();
        String sql = "insert into session_aggr_stat values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        Object[] params = new Object[] {sessionAggrStat.getTaskid(),
                sessionAggrStat.getSession_count(),
                sessionAggrStat.getVisit_length_1s_3s_ratio(),
                sessionAggrStat.getVisit_length_4s_6s_ratio(),
                sessionAggrStat.getVisit_length_7s_9s_ratio(),
                sessionAggrStat.getVisit_length_10s_30s_ratio(),
                sessionAggrStat.getVisit_length_30s_60s_ratio(),
                sessionAggrStat.getVisit_length_1m_3m_ratio(),
                sessionAggrStat.getVisit_length_3m_10m_ratio(),
                sessionAggrStat.getVisit_length_10m_30m_ratio(),
                sessionAggrStat.getVisit_length_30m_ratio(),
                sessionAggrStat.getStep_length_1_3_ratio(),
                sessionAggrStat.getStep_length_4_6_ratio(),
                sessionAggrStat.getStep_length_7_9_ratio(),
                sessionAggrStat.getStep_length_10_30_ratio(),
                sessionAggrStat.getStep_length_30_60_ratio(),
                sessionAggrStat.getStep_length_60_ratio(),};
        sessionFactory.executeUpdate ( sql, params );
    }
}

下面将聚合的结果写入mysql

 private static void calculateAndPersistAggrStat(String value) {
        //从Accumulator统计串中获取值
        long session_count = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.SESSION_COUNT));

        long visit_length_1s_3s = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_1s_3s));
        long visit_length_4s_6s = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_4s_6s));
        long visit_length_7s_9s = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_7s_9s));
        long visit_length_10s_30s = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_10s_30s));
        long visit_length_30s_60s = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_30s_60s));
        long visit_length_1m_3m = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_1m_3m));
        long visit_length_3m_10m = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_3m_10m));
        long visit_length_10m_30m = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_10m_30m));
        long visit_length_30m = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.TIME_PERIOD_30m));

        long step_length_1_3 = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.STEP_PERIOD_1_3));
        long step_length_4_6 = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.STEP_PERIOD_4_6));
        long step_length_7_9 = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.STEP_PERIOD_7_9));
        long step_length_10_30 = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.STEP_PERIOD_10_30));
        long step_length_30_60 = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.STEP_PERIOD_30_60));
        long step_length_60 = Long.valueOf(StringUtils.getFieldFromConcatString(
                value, "\\|", Constants.SESSION_PROJECT.STEP_PERIOD_60));

        //计算各个访问时长和访问步长的范围
        double visit_length_1s_3s_ratio = NumberUtils.formatDouble(
                (double)visit_length_1s_3s / (double)session_count, 2);
        double visit_length_4s_6s_ratio = NumberUtils.formatDouble(
                (double)visit_length_4s_6s / (double)session_count, 2);
        double visit_length_7s_9s_ratio = NumberUtils.formatDouble(
                (double)visit_length_7s_9s / (double)session_count, 2);
        double visit_length_10s_30s_ratio = NumberUtils.formatDouble(
                (double)visit_length_10s_30s / (double)session_count, 2);
        double visit_length_30s_60s_ratio = NumberUtils.formatDouble(
                (double)visit_length_30s_60s / (double)session_count, 2);
        double visit_length_1m_3m_ratio = NumberUtils.formatDouble(
                (double)visit_length_1m_3m / (double)session_count, 2);
        double visit_length_3m_10m_ratio = NumberUtils.formatDouble(
                (double)visit_length_3m_10m / (double)session_count, 2);
        double visit_length_10m_30m_ratio = NumberUtils.formatDouble(
                (double)visit_length_10m_30m / (double)session_count, 2);
        double visit_length_30m_ratio = NumberUtils.formatDouble(
                (double)visit_length_30m / (double)session_count, 2);

        double step_length_1_3_ratio = NumberUtils.formatDouble(
                (double)step_length_1_3 / (double)session_count, 2);
        double step_length_4_6_ratio = NumberUtils.formatDouble(
                (double)step_length_4_6 / (double)session_count, 2);
        double step_length_7_9_ratio = NumberUtils.formatDouble(
                (double)step_length_7_9 / (double)session_count, 2);
        double step_length_10_30_ratio = NumberUtils.formatDouble(
                (double)step_length_10_30 / (double)session_count, 2);
        double step_length_30_60_ratio = NumberUtils.formatDouble(
                (double)step_length_30_60 / (double)session_count, 2);
        double step_length_60_ratio = NumberUtils.formatDouble(
                (double)step_length_60 / (double)session_count, 2);

        //将访问结果封装成Domain对象
        SessionAggrStat sessionAggrStat = new SessionAggrStat();
        sessionAggrStat.setTaskid(taskid);
        sessionAggrStat.setSession_count(session_count);
        sessionAggrStat.setVisit_length_1s_3s_ratio(visit_length_1s_3s_ratio);
        sessionAggrStat.setVisit_length_4s_6s_ratio(visit_length_4s_6s_ratio);
        sessionAggrStat.setVisit_length_7s_9s_ratio(visit_length_7s_9s_ratio);
        sessionAggrStat.setVisit_length_10s_30s_ratio(visit_length_10s_30s_ratio);
        sessionAggrStat.setVisit_length_30s_60s_ratio(visit_length_30s_60s_ratio);
        sessionAggrStat.setVisit_length_1m_3m_ratio(visit_length_1m_3m_ratio);
        sessionAggrStat.setVisit_length_3m_10m_ratio(visit_length_3m_10m_ratio);
        sessionAggrStat.setVisit_length_10m_30m_ratio(visit_length_10m_30m_ratio);
        sessionAggrStat.setVisit_length_30m_ratio(visit_length_30m_ratio);

        sessionAggrStat.setStep_length_1_3_ratio(step_length_1_3_ratio);
        sessionAggrStat.setStep_length_4_6_ratio(step_length_4_6_ratio);
        sessionAggrStat.setStep_length_7_9_ratio(step_length_7_9_ratio);
        sessionAggrStat.setStep_length_10_30_ratio(step_length_10_30_ratio);
        sessionAggrStat.setStep_length_30_60_ratio(step_length_30_60_ratio);
        sessionAggrStat.setStep_length_60_ratio(step_length_60_ratio);

        //调用对应的DAO插入统计结果
        ISessionAggrStatDAO sessionAggrStatDAO = DAOFactory.getSessionAggrStatDAO();
        sessionAggrStatDAO.insert(sessionAggrStat);
    }

欢迎关注,更多惊喜等着你

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一篇关于大型电商用户行为分析大数据平台的实战文章。文章介绍了如何使用Spark技术构建一个可扩展的、高性能的大数据平台,用于分析电商用户的行为数据。该平台可以处理海量的数据,提供实时的数据分析和可视化展示,帮助电商企业更好地了解用户行为,优化产品和服务,提升用户体验和销售业绩。文章详细介绍了平台的架构设计、数据处理流程、数据分析方法和可视化展示方式,对于从事大数据分析和电商业务的人员具有很高的参考价值。 ### 回答2: 大数据平台在如今的电商领域中扮演着越来越重要的角色,帮助电商企业更好地了解用户需求、优化营销策略、提高销售效率和用户体验。而在这个领域中,Spark大数据分析引擎的应用也愈发广泛,帮助企业更好地处理和分析海量的数据。 电商用户行为分析大数据平台的构建需要考虑多个因素,包括数据采集、数据存储和数据处理等方面。其中,数据采集是关键的一环,需要收集用户在电商平台中的各种行为数据,如浏览商品、下单、付款和退款等。这些数据需要经过初步处理和清洗后才能被存储到大数据平台中。 在数据存储方面,Hadoop和HBase是两个常用的大数据存储技术。Hadoop可以将各种不同类型的数据按照文件的形式存储,而HBase则是分布式的、面向列的数据库,可以更好地支持结构化数据的存储和查询。 在数据处理方面,Spark作为一种快速而通用的大数据处理引擎,具有良好的扩展性、高效性和易用性。Spark可以处理非常大的数据集,并且可以在内存中缓存数据以加速处理速度。此外,Spark还提供了一些高级API,如Spark SQL、MLlib和GraphX等,可以帮助企业更高效地进行数据分析和挖掘。 在电商用户行为分析大数据平台的具体使用场景中,Spark可以用于用户行为分析、推荐算法优化、用户画像构建和活动效果评估等方面。例如,可以使用Spark用户浏览、下单和购买等行为数据进行分析,探索用户行为模式,挖掘用户需求,优化商品推荐和定价策略;同时,可以使用Spark对不同用户群体的行为数据进行整合和分析,为企业提供更准确的用户画像信息,帮助企业更好地了解不同用户群体的特点和需求。通过这些分析,企业可以精准地掌握用户需求,提高产品服务质量和营销效果,加速企业的发展和壮大。 ### 回答3: 随着电商市场的不断发展,对于用户的行为分析越来越重要,为了更好地提升用户体验和销售业绩,企业需要构建一个可靠的电商用户行为分析大数据平台。而Spark大型项目实战:电商用户行为分析大数据平台(一)则是这一领域的先锋。 Spark大型项目实战:电商用户行为分析大数据平台(一)所涉及到的核心技术主要有三个方面:数据采集、数据处理及数据分析。 首先是数据采集。在电商平台上,用户的行为主要包括页面访问、商品浏览、购物车添加、下单付款等。为了获取这些数据,需要在网站内添加代码或者使用第三方网站统计工具进行数据采集。 其次是数据处理。这一步骤主要利用Spark进行离线数据处理和流式数据处理,包括数据清洗、数据整合、数据融合、数据统计等。对于数据清洗来说,首先需要对数据进行去重、过滤,然后再进行数据整合、数据融合。数据统计则是非常重要的一步,可以统计用户的浏览、下单、付款等行为,以此来评估用户的消费行为和进行推荐。在流式数据处理方面,可以使用Kafka和Spark Streaming对实时数据进行处理,以提升数据处理效率和精确度。 最后是数据分析。通过对采集和处理的数据进行分析,可以对用户消费行为、支付渠道、商品销售情况等进行全面评估和推广分析。可以通过编写Spark程序,使用SQL和Python进行数据分析,从而挖掘出数据中隐藏的价值。例如可以通过用户行为数据来推荐商品、针对用户定制促销策略等。 以上就是Spark大型项目实战:电商用户行为分析大数据平台(一)的主要内容。通过使用Spark等技术,企业可以深入了解用户的消费行为,优化促销策略和提高销售业绩,提升用户满意度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值