143、Spark核心编程进阶之distinct以及网站uv统计案例

本文通过一个UV统计案例,详细介绍了Spark中RDD的Distinct算子如何对数据进行去重,以及如何在实际场景中应用该算子来统计每天独立访问网站的用户数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

distinct算子,对rdd中的数据进行去重

uv统计案例
uv:user view,每天每个用户可能对网站会点击多次
此时,需要对用户进行去重,然后统计出每天有多少个用户访问了网站,而不是所有用户访问了网站多少次(pv)

public class Distinct {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf()
                .setAppName("Distinct")
                .setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);

        
        List<String> accessLogs = Arrays.asList(
                "user1 2019-01-21 23:58:42",
                "user1 2019-01-21 23:58:43",
                "user1 2019-01-21 23:58:44",
                "user2 2019-01-21 12:58:42",
                "user2 2019-01-21 12:58:46",
                "user3 2019-01-21 12:58:42",
                "user4 2019-01-21 12:58:42",
                "user5 2019-01-21 12:58:42",
                "user6 2019-01-21 12:58:42",
                "user6 2019-01-21 12:58:45");
        JavaRDD<String> accessLogsRDD = sc.parallelize(accessLogs);

        JavaRDD<String> useridsRDD = accessLogsRDD.map(new Function<String, String>() {

            private static final long serialVersionUID = 1L;

            @Override
            public String call(String accessLog) throws Exception {
                String userid = accessLog.split(" ")[0];
                return userid;
            }

        });
        JavaRDD<String> distinctUseridsRDD = useridsRDD.distinct();
        int uv = distinctUseridsRDD.collect().size();
        System.out.println("uv: " + uv);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值