大数据-玩转数据-Flink 网站UV统计

一、说明

在实际应用中,我们往往会关注,到底有多少不同的用户访问了网站,所以另外一个统计流量的重要指标是网站的独立访客数(Unique Visitor,UV)。

二、数据准备

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

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserBehavior {
    private Long userId;
    private Long itemId;
    private Integer categoryId;
    private String behavior;
    private Long timestamp;
}

三、思路

对于UserBehavior数据源来说,我们直接可以根据userId来区分不同的用户。

将userid放到SET集合里面,统计集合长度,便可以统计到网站的访客数。

四、代码

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

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

import javax.naming.ldap.HasControls;
import java.util.HashSet;
import java.util.Set;

public class PUcount {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(2);
        env.readTextFile("input/UserBehavior.csv")
                .map(line -> {
                    String[] data = line.split(",");
                    return new UserBehavior(
                            Long.valueOf(data[0]),
                            Long.valueOf(data[1]),
                            Integer.valueOf(data[2]),
                            data[3],
                            Long.valueOf(data[4])
                    );
                }).filter(ub ->"pv".equals(ub.getBehavior()))
                .keyBy(UserBehavior::getBehavior)
                .process(new KeyedProcessFunction<String, UserBehavior, String>() {
                    Set<Long> userIdset = new HashSet<>();
                    @Override
                    public void processElement(UserBehavior value,
                                               Context ctx,
                                               Collector<String> out) throws Exception {
                        userIdset.add(value.getUserId());
                        out.collect("uv:"+ userIdset.size());



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

    }
}
相关推荐
阿部多瑞 ABU3 小时前
新帝国殖民主义:文化-情感-金融复合体的当代运作机制
大数据·人工智能·金融
动恰客流统计3 小时前
ReID边缘计算视觉统计:餐饮店客流增长的数字化破局路径
java·大数据·运维·人工智能
接针5 小时前
UV 常用命令
python·uv
狙击主力投资工具7 小时前
通达信电脑版分时图成交量颜色怎么调? 分时成交量的的颜色怎么修改.股票分时图成交量修改颜色
大数据
A15362558 小时前
国内进销存软件排名2026 电商&零售企业选型指南
大数据·人工智能·零售
Warren2Lynch9 小时前
掌握 UML 构造型、标记定义与标记值:面向领域特定建模的 UML 扩展全面指南
大数据·算法·uml
晓子文集9 小时前
Tushare接口文档:期货交易日历(fut_trade_cal)
大数据·算法
老胡全房源系统10 小时前
可以买断的房产中介ERP系统
大数据
专业工业电源打工人11 小时前
F0505S-2WR3 适配优选 钡特电源 DF2-05S05LS|2W 隔离 DC-DC 模块电源5V转5V硬件选型参数规格解析
大数据·网络·人工智能
暖和_白开水11 小时前
数据分析agent(九-2):es启动补充
大数据·elasticsearch·搜索引擎