【大数据学习篇10】Spark项目实战~网站转化率统计

您所在的位置:网站首页 java程序编写的心得体会 【大数据学习篇10】Spark项目实战~网站转化率统计

【大数据学习篇10】Spark项目实战~网站转化率统计

2024-07-15 16:11| 来源: 网络整理| 查看: 265

学习目标/Target

掌握网站转化率统计实现思路

了解如何生成用户浏览网页数据

掌握如何创建Spark连接并读取数据集

掌握利用Spark SQL统计每个页面访问次数

 掌握利用Spark SQL获取每个用户浏览网页的顺序

掌握利用Spark SQL合并同一用户浏览的网页

 掌握利用Spark SQL统计每个单跳的次数

掌握利用Spark SQL计算页面单跳转化率

掌握将数据持久化到HBase数据库

熟悉通过Spark On YARN运行程序

概述

        网站转化率(conversion rate)是指用户进行了相应目标行动的访问次数与总访问次数的比率。这里所指的相应目标行动可以是用户登录、用户注册、用户浏览、用户购买等一系列用户行为,因此网站转化率是一个广义的概念。页面单跳转化率是网站转化率的一种统计形式,通过统计页面单跳转化率,来优化页面布局及营销策略,使访问网站的用户可以更深层次的浏览网站。本章我们将对用户浏览网页数据进行分析,从而统计出页面单跳转化率。

1. 数据集分析

        通过编写的Java程序模拟生成用户浏览网页数据作为数据集,数据集中的每一行数据代表一个用户的浏览行为,所有浏览行为都与页面-和用户有关。

{ "actionTime":"2020-07-22 06:34:02", "sessionid":"98ac879b5a0a4a4eb117dffd84da1ff4", "pageid":3, "userid":8 }

actionTime: 用户访问页面的时间;

sessionid:用于标识用户行为的唯一值;

pageid:用户浏览网页的ID;

userid:用户ID;

2.实现思路分析

        当用户浏览网页时,通过当前浏览页面(A)跳转到另一个页面(B),此用户行为被称为一次A→B的单跳。如计算A→B的页面单跳转化率,则计算公式如下。

A→B页面单跳转化率=A→B的单跳总数/A总访问次数

计算页面单跳转化率需要两部分数据,分别是A→B的单跳总数和A总访问次数。

A总访问次数可以通过聚合操作获取,A→B的单跳总数实现思路如下。

根据用户ID和访问时间对数据集进行排序操作,获取每个用户浏览网页的顺序。

根据用户ID对排序后的数据进行分组操作,将同一用户浏览的网页进行合并。

对分组后的数据进行转换操作,将同一用户浏览的网页按照浏览顺序转换为单跳形式。

对转换后的数据进行聚合操作统计每个单跳的总数,其中包括A→B的单跳总数。

页面单跳转化率统计实现过程。

3.实现网站转化率统计  3.1  生成用户浏览网页数据

        在项目SparkProject的 java目录新建Package包“cn.itcast.conversion”,用于存放实现网站转化率统计的Java文件。在包“cn.itcast.conversion”中创建文件GenerateData.java,用于模拟生成用户浏览网页数据。

        选中文件GenerateData.java并单击右键,在弹出的菜单栏选择“Run.GenerateData.main()”运行程序,生成用户浏览网页数据。

        程序运行完成后在“D:\\sparkdata”目录中会生成JSON文件user_conversion.json,该文件包含用户浏览网页数据。

3.2  修改pom.xml文件

        由于实现网站转化率统计是通过Spark SQL程序实现,所以需要在项目SparkProject的pom.xml文件中添加Spark SQL依赖。

     org.apache.spark

     spark-sql_2.11

     2.3.2

3.3  创建Spark连接并读取数据集

        在项目SparkProject的包“cn.itcast.conversion”中创建文件PageConversion.java,用于实现网站转化率统计。

public class PageConversion {

    public static void main(String[] arg){

    //实现Spark SQL程序

    }

        在文件PageConversion.java的main()方法中创建SparkSession对象,用于实现Spark SQL程序。

SparkSession spark = SparkSession

    .builder()

    //设置Application名称为page_conversion

    .appName("page_conversion")

    .getOrCreate();

        在文件PageConversion.java的main()方法中,调用SparkSession对象的read().json()方法读取外部JSON文件,将JSON文件中的数据加载到userConversionDS。

Dataset userConversionDS = spark.read().json(arg[0]);

        在文件PageConversion.java的main()方法中,调用DataSet的createOrReplaceTempView()方法,将userConversionDS创建为全局临时视图conversion_table。        

userConversionDS.createOrReplaceTempView("conversion_table");

3.4  统计每个页面访问次数

在文件PageConversion.java的main()方法中,调用SparkSession的sql()方法统计每个页面访问次数,将统计结果加载到pageIdPvDS。

Dataset pageIdPvDS = spark

    .sql("select pageid,count(*) as pageid_count " +

            "from conversion_table " +

            "group by pageid");

3.5  获取每个用户浏览网页的顺序\

        在文件PageConversion.java的main()方法中,调用SparkSession的sql()方法对每个用户浏览网页的顺序进行排序,将排序结果加载到useridGroupSortDS。

Dataset useridGroupSortDS = spark

    .sql("select userid,actionTime,pageid " +

            "from conversion_table " +

            "order by userid,actionTime");

        在文件PageConversion.java的main()方法中,调用DataSet的createOrReplaceTempView()方法,将useridGroupSortDS创建为全局临时视图conversion_group_sort_table。

useridGroupSortDS.createOrReplaceTempView("conversion_group_sort_table");

3.6  合并同一用户浏览的网页

        在文件PageConversion.java的main()方法中,调用SparkSession的sql()方法对同一用户浏览的网页进行合并,将合并结果加载到pageConversionRDD。为了后续使用flatMap()算子对合并后的数据进行扁平化处理,这里通过SparkSession的toJavaRDD()方法将DataSet转为JavaRDD。

JavaRDD pageConversionRDD = spark.sql("select userid," +     "concat_ws(',',collect_list(pageid)) as column2s " +     "from conversion_group_sort_table " +     "group by userid").toJavaRDD();

3.7  统计每个单跳的次数

        在文件PageConversion.java的main()方法中,使用flatMap()算子对pageConversionRDD进行扁平化处理,根据用户浏览网页的顺序将相邻网页拼接为单跳,将处理结果加载到rowRDD。

JavaRDD rowRDD = pageConversionRDD.flatMap(new FlatMapFunction() {     @Override     public Iterator call(Row row) throws Exception {

        List list = new ArrayList();

        String[] page = row.get(1).toString().split(",");

        String pageConversionStr = "";  

      for (int i = 0;i

list

TABLE                                                                                                                                       conversion 

查看程序运行结果

在HBase命令行工具执行“scan 'conversion'”命令,查看数据表conversion中所有数据。

        本文主要讲解了如何通过用户浏览网页数据实现网站转化率统计,首先我们对数据集进行分析,使读者了解用户浏览网页数据的数据结构。接着通过实现思路分析,使读者了解网站转化率统计的实现流程。然后通过IntelliJ IDEA开发工具实现网站转化率统计程序并将统计结果存储到HBase数据库,使读者掌握运用Java语言编写Spark SQL和HBase程序的能力。最后封装网站转化率统计程序并提交到集群运行,使读者掌握运用IntelliJ IDEA开发工具封装Spark SQL程序以及Spark ON YARN模式运行Spark SQL程序的方法。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3