116.Spark大型电商项目-广告点击流量实时统计-基于动态黑名单进行点击行为过滤

目录

代码

AdClickRealTimeStatSpark.java 


本篇文章记录广告点击流量实时统计-基于动态黑名单进行点击行为过滤。

代码

spark.ad

AdClickRealTimeStatSpark.java 

    /**
     * 过滤广告黑名单用户日志
     * @param adRealTimeLogDStream
     * @return
     */

    private static JavaPairDStream<String,String> filterByBlacklist(JavaPairInputDStream<String,String> adRealTimeLogDStream){
        // 刚刚接受到原始的用户点击行为日志之后
        // 根据mysql中的动态黑名单,进行实时的黑名单过滤(黑名单用户的点击行为,直接过滤掉,不要了)
        // 使用transform算子(将dstream中的每个batch RDD进行处理,转换为任意的其他RDD,功能很强大)
        JavaPairDStream<String,String> filteredAdRealTimeLogDStream = adRealTimeLogDStream.transformToPair(new Function<JavaPairRDD<String, String>, JavaPairRDD<String, String>>() {
            private static final long serialVersionUID = 1L;
            @Override
            public JavaPairRDD<String, String> call(JavaPairRDD<String, String> rdd) throws Exception {

                // 首先,从mysql中查询所有黑名单用户,将其转换为一个rdd
                IAdBlacklistDAO adBlacklistDAO = DAOFactory.getAdBlacklistDAO();
                List<AdBlacklist> adBlacklists = adBlacklistDAO.findAll();

                List<Tuple2<Long,Boolean>> tuples = new ArrayList<Tuple2<Long, Boolean>>();

                for (AdBlacklist adBlacklist : adBlacklists){
                    tuples.add(new Tuple2<Long,Boolean>(adBlacklist.getUserid(),true));
                }

                JavaSparkContext sc = new JavaSparkContext(rdd.context());
                JavaPairRDD<Long,Boolean> blacklistRDD = sc.parallelizePairs(tuples);

                // 将原始数据rdd映射成<userid, tuple2<string, string>>

                JavaPairRDD<Long,Tuple2<String,String>> mappedRDD = rdd.mapToPair(new PairFunction<Tuple2<String, String>, Long, Tuple2<String, String>>() {
                    private static final long serialVersionUID = 1L;
                    @Override
                    public Tuple2<Long, Tuple2<String, String>> call(Tuple2<String, String> tuple) throws Exception {

                        String log = tuple._2;
                        String[] logSplited = log.split("_");
                        long userid = Long.valueOf(logSplited[3]);
                        return new Tuple2<Long,Tuple2<String, String>>(userid,tuple);
                    }
                });

                // 将原始日志数据rdd,与黑名单rdd,进行左外连接
                // 如果说原始日志的userid,没有在对应的黑名单中,join不到,左外连接
                // 用inner join,内连接,会导致数据丢失
                JavaPairRDD<Long, Tuple2<Tuple2<String, String>, Optional<Boolean>>> joinedRDD = mappedRDD.leftOuterJoin(blacklistRDD);

                JavaPairRDD<Long,Tuple2<Tuple2<String,String>,Optional<Boolean>>> filteredRDD = joinedRDD.filter(new Function<Tuple2<Long, Tuple2<Tuple2<String, String>, Optional<Boolean>>>, Boolean>() {
                    private static final long serialVersionUID = 1L;
                    @Override
                    public Boolean call(Tuple2<Long, Tuple2<Tuple2<String, String>, Optional<Boolean>>> tuple) throws Exception {
                        Optional<Boolean> optional = tuple._2._2;
                        // 如果这个值存在,那么说明原始日志中的userid,join到了某个黑名单用户
                        if (optional.isPresent() && optional.get()){
                            return false;
                        }
                        return true;
                    }
                });

                JavaPairRDD<String,String> resultRDD = filteredRDD.mapToPair(new PairFunction<Tuple2<Long, Tuple2<Tuple2<String, String>, Optional<Boolean>>>, String, String>() {
                    private static final long serialVersionUID = 1L;
                    @Override
                    public Tuple2<String, String> call(Tuple2<Long, Tuple2<Tuple2<String, String>, Optional<Boolean>>> tuple) throws Exception {
                        return tuple._2._1;
                    }
                });

                return resultRDD;
            }
        });
        return filteredAdRealTimeLogDStream;
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于spark的大型网站交互式行为分析系统项目实战,主要采用spark框架对大规模的网站用户行为数据进行实时处理和分析。 首先,我们需要搭建一个高可伸缩的spark集群用于处理大规模的数据。通过spark的分布式计算能力,我们可以提高数据处理的速度和效率。 接下来,我们从网站的日志中提取出用户的行为数据,如浏览产品、加购物车、下单等信息,并将其存储在分布式文件系统中,如Hadoop的HDFS。 然后,我们使用spark的强大的数据处理能力对这些用户行为数据进行实时分析。首先,我们可以通过spark的SQL模块进行数据查询和过滤,以获取需要的数据子集。然后,我们可以使用spark的机器学习库对数据进行特征提取和模型训练,来预测用户的购买意向或下一步的行为。 同时,我们还可以利用spark的流处理模块对用户行为数据进行实时统计和监控。通过spark Streaming实时处理流式数据,并在交互式的仪表板上展示用户行为实时动态和趋势分析。 最后,我们可以通过spark的图计算模块进行社交网络分析,例如计算用户之间的连接性、社交影响力等。这些分析结果可以帮助网站了解用户行为习惯,从而进行个性化推荐、精准营销等策略。 通过以上的实战项目,我们可以充分利用spark的分布式计算和实时处理能力,对大型网站的用户行为数据进行交互式分析和智能决策支持,从而提高的运营效率和用户体验。同时,基于spark的大数据处理技术也为网站提供了更多的发展机会和创新空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值