UserView--第一种方式set去重,基于Spark算子的java代码实现

测试数据
java代码
  1. package com.hzf.spark.study;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Iterator;
  5. import java.util.Set;
  6.  
  7. import org.apache.spark.SparkConf;
  8. import org.apache.spark.api.java.JavaPairRDD;
  9. import org.apache.spark.api.java.JavaRDD;
  10. import org.apache.spark.api.java.JavaSparkContext;
  11. import org.apache.spark.api.java.function.Function;
  12. import org.apache.spark.api.java.function.PairFunction;
  13. import org.apache.spark.api.java.function.VoidFunction;
  14. import org.apache.spark.broadcast.Broadcast;
  15.  
  16. import scala.Tuple2;
  17.  
  18. public class UVAnalysis {
  19. public static void main(String[] args) {
  20. SparkConf conf = new SparkConf().setAppName("UV_ANA").setMaster("local")
  21. .set("spark.testing.memory", "2147480000");
  22. @SuppressWarnings("resource")
  23. JavaSparkContext sc = new JavaSparkContext(conf);
  24. JavaRDD<String> logRDD = sc.textFile("userLog1");
  25. String str = "View";
  26. final Broadcast<String> broadcast = sc.broadcast(str);
  27. uvAnalyze(logRDD, broadcast);
  28. }
  29.  
  30. private static void uvAnalyze(JavaRDD<String> logRDD, final Broadcast<String> broadcast) {
  31. JavaRDD<String> filteredLogRDD = logRDD.filter(new Function<String, Boolean>() {
  32.  
  33. private static final long serialVersionUID = 1L;
  34.  
  35. @Override
  36. public Boolean call(String v1) throws Exception {
  37. String actionParam = broadcast.value();
  38. String action = v1.split("\t")[5];
  39. return actionParam.equals(action);
  40. }
  41. });
  42.  
  43. JavaPairRDD<String, String> pairLogRDD = filteredLogRDD
  44. .mapToPair(new PairFunction<String, String, String>() {
  45.  
  46. private static final long serialVersionUID = 1L;
  47.  
  48. @Override
  49. public Tuple2<String, String> call(String val) throws Exception {
  50. String pageId = val.split("\t")[3];
  51. String userId = val.split("\t")[2];
  52. return new Tuple2<String, String>(pageId, userId);
  53. }
  54. });
  55.  
  56. pairLogRDD.groupByKey().foreach(new VoidFunction<Tuple2<String, Iterable<String>>>() {
  57. private static final long serialVersionUID = 1L;
  58.  
  59. @Override
  60. public void call(Tuple2<String, Iterable<String>> tuple) throws Exception {
  61. String pageId = tuple._1;
  62. Iterator<String> iterator = tuple._2.iterator();
  63. Set<String> userSets = new HashSet<>();
  64. while (iterator.hasNext()) {
  65. String userId = iterator.next();
  66. userSets.add(userId);
  67. }
  68. System.out.println("PAGEID:" + pageId + "\t UV_COUNT:" + userSets.size());
  69. }
  70. });
  71. }
  72. }

  

result

 

 

UserView--第一种方式set去重,基于Spark算子的java代码实现的更多相关文章

  1. UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现

      UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现   测试数据 java代码 package com.hzf.spark.study; import ...

  2. 多生产者多消费者(第一种方式),基于synchronized,wait,notifyAll

    生产者消费者模式描述的是协调与协作关系.比如一个人正在准备食物(生产者),而另一个人正在吃(消费者),他们使用一个共用 的桌子用于放置盘子和取走盘子,生产者准备食物,如果桌子上已经满了就等待,消费者( ...

  3. 创建多线程程序的第一种方式_创建Thread类的子类

    创建多线程程序的第一种方式:创建Thread类的子类java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类 实现步骤: 1.创建一个Thread类的子类 ...

  4. HBase读写的几种方式(二)spark篇

    1. HBase读写的方式概况 主要分为: 纯Java API读写HBase的方式: Spark读写HBase的方式: Flink读写HBase的方式: HBase通过Phoenix读写的方式: 第一 ...

  5. 【转帖】HBase读写的几种方式(二)spark篇

    HBase读写的几种方式(二)spark篇 https://www.cnblogs.com/swordfall/p/10517177.html 分类: HBase undefined 1. HBase ...

  6. Unity 人物跟谁手指的移动(第一种方式)

    长夜漫漫无心睡眠,敲敲代码,越敲越来劲! 我发现好多小朋友都在玩熊出没之xxxx这个游戏,居然打了一下午都没玩通第2关,我把测试也叫来陪我一起玩! 结果他也打不通,我再去叫策划,他也没打过,我去叫主管 ...

  7. 创建多线程的第一种方式——创建Thread子类和重写run方法

    创建多线程的第一种方式——创建Thread子类和重写run方法: 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程: 第一种方式创建Thread子类和重写run方 ...

  8. Struts2框架的数据封装一之属性封装(属性封装的第一种方式:对参数进行封装)

    request带着参数来,aciton对其进行处理.在学习action之前,使用的是servlet对request进行处理.request请求时会带有参数,所以我们要对这些参数进行封装. 1. 为什么 ...

  9. Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。

    1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...

随机推荐

  1. Dubbo(一) 开始认识Dubbo,分布式服务框架

    引言: 以前的车马很慢,一生只够爱一个人以前的网站人很少,一个单应用服务着一个人--------------------现在,动不动就谈什么高并发,千万级访问.单应用?BOOM!分分钟爆炸.于是,技术 ...

  2. 基于Docker的ELK日志平台搭建

    1.安装Docker Docker可简单理解为一个轻量级的虚拟机.Docker对进程进行封装隔离,隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器.Docker和传统虚拟化方式的不同.传统虚拟 ...

  3. java自动化测试-http请求post

    继上文的get请求http://www.cnblogs.com/xuezhezlr/p/7667995.html的简单讲解后,这篇文章大概说一下我所遇到的主要的post请求以及他的测试代码 上文介绍到 ...

  4. 每天学一点Docker(5)——了解Docker架构

    Docker的核心组件: 1.Docker客户端 - Client 2.Docker服务器 - Docker deamon 3.Docker镜像 - Image 4.仓库 - Registry 5.D ...

  5. WebDriver的等待方式

    /* * 1.线程休眠 * 2.隐式等待 * 3.显示等待 * */ package com.sfwork; import java.util.concurrent.TimeUnit; import ...

  6. HDFS Architecture

    http://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html Introduction Ha ...

  7. 【动态规划】洛谷P1004方格取数

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  8. [认证授权] 6.Permission Based Access Control

    在前面5篇博客中介绍了OAuth2和OIDC(OpenId Connect),其作用是授权和认证.那么当我们得到OAuth2的Access Token或者OIDC的Id Token之后,我们的资源服务 ...

  9. 分享html5的一个拖拽手法

    就是这样的效果:拖拽之前 之后: 上代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  10. Codeforces 839E Mother of Dragons【__builtin_popcount()的使用】

    E. Mother of Dragons time limit per test:2 seconds memory limit per test:256 megabytes input:standar ...