手撕项目-Flink电商实时分析二

由于没有大量的测试数据,所以我们需要手动编写一些测试数据通过上报服务上传,做一些mapreduce操作。

 

1.模拟电商浏览记录

创建ScanlogProduce类

主要字段是

频道id 类别id 产品id 用户id 打开时间 离开时间 地区 网络方式 来源方式 浏览器

首先初始化实例数据

Random random = new Random();

        for(int i=0;i<20;i++){
            //频道id 类别id 产品id 用户id 打开时间 离开时间 地区 网络方式 来源方式 浏览器
            UserscanLog userscanLog = new UserscanLog();
            userscanLog.setPingdaoid(pindaoids[random.nextInt(pindaoids.length)]);
            userscanLog.setLeibieid(leibieids[random.nextInt(leibieids.length)]);
            userscanLog.setChanpinid(chanpinids[random.nextInt(chanpinids.length)]);
            userscanLog.setUserid(yonghuids[random.nextInt(yonghuids.length)]);
            userscanLog.setContry(contrys[random.nextInt(contrys.length)]);
            userscanLog.setProvince(provinces[random.nextInt(provinces.length)]);
            userscanLog.setCity(citys[random.nextInt(citys.length)]);
            userscanLog.setNetwork(networks[random.nextInt(networks.length)]);
            userscanLog.setSources(sources[random.nextInt(sources.length)]);
            userscanLog.setLiulanqitype(liulanqis[random.nextInt(liulanqis.length)]);
            Long[] times = usetimelog.get(random.nextInt(usetimelog.size()));
            userscanLog.setStarttime(times[0]);
            userscanLog.setEndetime(times[1]);
            String jonstr = JSONObject.toJSONString(userscanLog);
            System.out.println(jonstr);
                        UrlsendUtil.sendmessage("http://127.0.0.1:6097/DsInfoSjService/webInfoSJService",jonstr);
        }

启动上报服务,测试并查看输出结果:

 

2.编写MapReduce计算

 

Map(取出收到消息的id和次数):

 

public PindaoRD map(KafkaMessage value) throws Exception {
        String jsonstring = value.getJsonmessage();
        System.out.println("map进来的数据=="+jsonstring);
        UserscanLog userscanLog = JSON.parseObject(jsonstring, UserscanLog.class);
        long pingdaoid = userscanLog.getPingdaoid();
        PindaoRD pindaoRD = new PindaoRD();
        pindaoRD.setPingdaoid(pingdaoid);
        pindaoRD.setCount(Long.valueOf(value.getCount()+""));
        return pindaoRD;
    }

Reduce(计算相同频道id累加的次数):

 

public PindaoRD reduce(PindaoRD value1, PindaoRD value2) throws Exception {
        PindaoRD pindaoRD = new PindaoRD();
        System.out.println("value1=="+value1);
        System.out.println("value2=="+value2);
        pindaoRD.setPingdaoid(value1.getPingdaoid());
        pindaoRD.setCount(value1.getCount()+value2.getCount());
        return  pindaoRD;
    }

启动flink测试类,控制台打印结果:

 

3.总结

本篇主要是大量测试的字段编写比较费劲(大家都懂,java的bean属性很多),后续会包生成的测试数据进行持久化存储,将搭建redis服务,由于服务器有限,都在一台服务器上(服务器充裕的tuhao忽略)。

具体代码可参照我的git项目地址,现有代码均已通过测试可以使用,后续会持续更新,直到项目结束,不懂的细节,可以关注公众号,后台留言,会细致解答。

git地址:https://github.com/jyqjyq/filnkDS.git

好的,针对电商用户行为分析Flink 代码解析,我可以提供一些简单的示例代码和解释,供您参考。 首先,我们需要定义用户行为数据的数据模型,通常包括用户 ID、行为类型、商品 ID、时间戳等字段。示例代码如下: ```java public class UserBehavior { public long userId; public long itemId; public int categoryId; public String behavior; public long timestamp; } ``` 接下来,我们使用 Flink 流处理框架来实时处理和分析用户行为数据。示例代码如下: ```java // 创建数据源,从 Kafka 中读取用户行为数据 FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("user-behavior", new SimpleStringSchema(), properties); DataStream<String> stream = env.addSource(consumer); // 将用户行为数据转换为 UserBehavior 对象 DataStream<UserBehavior> behaviorStream = stream.map(new MapFunction<String, UserBehavior>() { @Override public UserBehavior map(String value) throws Exception { JSONObject json = JSONObject.parseObject(value); return new UserBehavior( json.getLong("user_id"), json.getLong("item_id"), json.getInteger("category_id"), json.getString("behavior"), json.getLong("timestamp") ); } }); // 过滤出浏览行为,并进行分组聚合 DataStream<Tuple2<Long, Long>> pvStream = behaviorStream .filter(new FilterFunction<UserBehavior>() { @Override public boolean filter(UserBehavior behavior) throws Exception { return behavior.behavior.equals("pv"); } }) .map(new MapFunction<UserBehavior, Tuple2<Long, Long>>() { @Override public Tuple2<Long, Long> map(UserBehavior behavior) throws Exception { return new Tuple2<>(behavior.itemId, 1L); } }) .keyBy(0) .sum(1); // 输出结果到控制台 pvStream.print(); ``` 以上代码实现了从 Kafka 中读取用户行为数据,将数据转换为 UserBehavior 对象,过滤出浏览行为,并按商品 ID 进行分组聚合,最后将结果输出到控制台。 当然,电商用户行为分析还涉及到很多其他的问题和场景,如购买转化率分析、用户活跃度分析、商品热度排名分析等等。针对不同的问题和场景,需要进行不同的数据处理和分析。希望这个示例代码能够帮助您理解 Flink电商用户行为分析中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值