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

Posted 日月的弯刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现相关的知识,希望对你有一定的参考价值。

 

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

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


 

 

以上是关于UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot基础集成插件

throws关键字_异常处理的第一种方式(交给别人处理)和try_catch_异常处理的第二种方式(自己处理)

使用日期对象,键盘录入一个年份,判断该年是否为闰年 * 用两种方式完成: * 第一种可以根据二月共有多少天来判断 * 第二种可以根据一年总共有多少天来判断

#pragma once

IDEA点击某一个类快速定位到项目目录

关于css样式的看法