大数据-玩转数据-Flink网页埋点PV统计

一、说明

衡量网站流量一个最简单的指标,就是网站的页面浏览量(Page View,PV)。用户每次打开一个页面便记录1次PV,多次打开同一页面则浏览量累计。

一般来说,PV与来访者的数量成正比,但是PV并不直接决定页面的真实来访者数量,如同一个来访者通过不断的刷新页面,也可以制造出非常高的PV。接下来我们就用Flink算子来实现PV的统计。

二、测试数据准备

把数据文件 UserBehavior 复制到project的input目录下

用于封装数据的JavaBean类

java 复制代码
package com.atguigu.flink.java.chapter_6;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author lizhenchao@atguigu.cn
 * @Date 2020/12/10 19:32
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserBehavior {
    private Long userId;
    private Long itemId;
    private Integer categoryId;
    private String behavior;
    private Long timestamp;
}

三、代码

pv实现思路1: WordCount

java 复制代码
package com.lyh.flink06;

import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class PVcount {
    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.readTextFile("input/UserBehavior.csv")
                .map(line -> { // 对数据切割, 然后封装到POJO中
                    String[] split = line.split(",");
                    return new UserBehavior(
                            Long.valueOf(split[0]),
                            Long.valueOf(split[1]),
                            Integer.valueOf(split[2]),
                            String.valueOf(split[3]),
                            Long.valueOf(split[4]));
                })
                .filter(behavior -> "pv".equals(behavior.getBehavior())) //过滤出pv行为
                .map(behavior -> Tuple2.of("pv", 1L))
                .returns(Types.TUPLE(Types.STRING, Types.LONG)) // 使用Tuple类型, 方便后面求和
                .keyBy(value -> value.f0)  // keyBy: 按照key分组
                .sum(1) // 求和
                .print();

        env.execute();

    }
}

pv实现思路2: process

java 复制代码
package com.lyh.flink06;

import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.KeyedProcessFunction;
import org.apache.flink.util.Collector;

public class PVprocess {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(2);
        env.readTextFile("input/UserBehavior.csv")
                .map(line -> {
                    String[] split = line.split(",");
                    return new UserBehavior(
                            Long.valueOf(split[0]),
                            Long.valueOf(split[1]),
                            Integer.valueOf(split[2]),
                            String.valueOf(split[3]),
                            Long.valueOf(split[4]));

                })
                .filter(behavior -> "pv".equals(behavior.getBehavior()))
                .keyBy(UserBehavior::getBehavior)
                .process(new KeyedProcessFunction<String, UserBehavior, Long>() {
                    long count = 0;
                    @Override
                    public void processElement(UserBehavior userBehavior,
                                               Context ctx,
                                               Collector<Long> out) throws Exception {
                        count++;
                        out.collect(count);

                    }
                }).print();
        env.execute();
    }
}

四、运行结果

相关推荐
非极限码农3 小时前
Apache Spark 上手指南(基于 Spark 3.5.0 稳定版)
大数据·spark·apache
Guheyunyi6 小时前
消防管理系统如何重构现代空间防御体系
大数据·运维·人工智能·安全·信息可视化·重构
二进制_博客8 小时前
spark on hive 还是 hive on spark?
大数据·hive·spark
智海观潮8 小时前
Spark RDD详解 —— RDD特性、lineage、缓存、checkpoint、依赖关系
大数据·缓存·spark
一个会的不多的人11 小时前
数字化转型:概念性名词浅谈(第七十二讲)
大数据·人工智能·制造·数字化转型
数据智能老司机11 小时前
在 Databricks 上的 Unity Catalog 数据治理——Unity Catalog 的内部机制
大数据·架构
gb421528713 小时前
elasticsearch索引多长时间刷新一次(智能刷新索引根据数据条数去更新)
大数据·elasticsearch·jenkins
IT毕设梦工厂14 小时前
大数据毕业设计选题推荐-基于大数据的人体生理指标管理数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·信息可视化·spark·毕业设计·源码·bigdata
数在表哥14 小时前
从数据沼泽到智能决策:数据驱动与AI融合的中台建设方法论与技术实践指南(四)
大数据·人工智能
爱思德学术14 小时前
中国计算机学会(CCF)推荐学术会议-C(数据库/数据挖掘/内容检索):PAKDD 2026
大数据·机器学习·数据挖掘·知识发现