大数据-玩转数据-Flink App市场推广统计

一、说明

电商网站中已经有越来越多的用户来自移动端,相比起传统浏览器的登录方式,手机APP成为了更多用户访问电商网站的首选。对于电商企业来说,一般会通过各种不同的渠道对自己的APP进行市场推广,而这些渠道的统计数据(比如,不同网站上广告链接的点击量、APP下载量)就成了市场营销的重要商业指标。

二、思路

统计 不同渠道的不同用户行为

三、数据准备

封装数据的JavaBean类

java 复制代码
package com.lyh.flink06;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MarketingUserBehavior {
    private Long userId;
    private String behavior;
    private String channel;
    private Long timestamp;
}

四、代码

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

import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.SourceFunction;

import java.util.Random;

public class Project_AppAnalysis_By_Chanel {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(2);
        env.addSource(new AppSource())
                .map(new MapFunction<MarketingUserBehavior, Tuple2<String,Long>>() {
                    @Override
                    public Tuple2<String, Long> map(MarketingUserBehavior value) throws Exception {
                        return Tuple2.of(value.getBehavior() + "_" + value.getChannel(),1L);
                    }
                }).keyBy(0)
                .sum(1)
        .print();
         env.execute();
    }
    public static class AppSource implements SourceFunction<MarketingUserBehavior> {

        @Override
        public void run(SourceContext<MarketingUserBehavior> ctx) throws Exception {
            Random random = new Random();
            String[] behaviors = {"update", "install", "uninstall", "update"};
            String[] chanels ={"HW","VIVO","XIAOMI","OPPO"};

            while (true){

                Long userId = (long)(random.nextInt(2000) + 1);
                String behavior = behaviors[random.nextInt(behaviors.length)];
                String chanel = chanels[random.nextInt(chanels.length)];
                Long timstampes = System.currentTimeMillis();


                ctx.collect(new MarketingUserBehavior(
                        userId,
                        behavior,
                        chanel,
                        timstampes

                ));
                Thread.sleep(200);
            }

        }

        @Override
        public void cancel() {
        }
    }

}

五、运行结果

相关推荐
Elastic 中国社区官方博客28 分钟前
Elasticsearch:智能搜索的 MCP
大数据·人工智能·elasticsearch·搜索引擎·全文检索
未来之窗软件服务3 小时前
浏览器开发CEFSharp+X86 (十六)网页读取电子秤数据——仙盟创梦IDE
大数据·智能硬件·浏览器开发·仙盟创梦ide·东方仙盟·东方仙盟网页调用sdk
阿豪35 小时前
2025 年职场转行突围:除实习外,这些硬核证书让你的简历脱颖而出(纯经验分享)
大数据·人工智能·经验分享·科技·信息可视化·产品经理
张驰课堂5 小时前
老树发新芽:六西格玛培训为石油机械制造注入持久活力
大数据·人工智能·制造
卡卡_R-Python5 小时前
大数据探索性分析——抽样技术应用
大数据·r
伍哥的传说5 小时前
Lodash-es 完整开发指南:ES模块化JavaScript工具库实战教程
大数据·javascript·elasticsearch·lodash-es·javascript工具库·es模块·按需导入
请提交用户昵称6 小时前
大数据各组件flume,datax,presto,DolphinScheduler,findBI在大数据数仓架构中的作用和功能。
大数据·flume·datax·dolphin·presto·findbi·大数据组件
IT果果日记6 小时前
详解DataX开发达梦数据库插件
大数据·数据库·后端
用户Taobaoapi20147 小时前
微店API秘籍!轻松获取商品详情数据
大数据·数据挖掘·数据分析
chimchim668 小时前
StarRocks导入数据-使用 Broker Load 进行异步导入
大数据·sql