目录

一、数据去重

1.1实例描述

1.2 解题思路

1.3 代码展示

1.4 运行结果展示

二、数据排序

2.1 实例描述

2.2 解题思路

2.3 代码展示

2.4 运行结果展示

三、平均成绩

3.1 实例描述

3.2 解题思路

3.3 代码展示

3.4 运行结果展示

四、单表关联

4.1 实例描述

4.2 解题思路

4.3代码展示

4.4 运行结果展示


一、数据去重

"数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选。统计大数据集上的数据种类个数、从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重。

1.1实例描述

对数据文件中的数据进行去重。数据文件中的每行都是一个数据。样例输入如下所示:

1)file1:

2012-3-1 a

2012-3-2 b

2012-3-3 c

2012-3-4 d

2012-3-5 a

2012-3-6 b

2012-3-7 c

2012-3-3 c

2)file2:

2012-3-1 b

2012-3-2 a

2012-3-3 b

2012-3-4 d

2012-3-5 a

2012-3-6 c

2012-3-7 d

2012-3-3 c

样例输出如下所示:

2012-3-1 a

2012-3-1 b

2012-3-2 a

2012-3-2 b

2012-3-3 b

2012-3-3 c

2012-3-4 d

2012-3-5 a

2012-3-6 b

2012-3-6 c

2012-3-7 c

1.2 解题思路

1.3 代码展示

public class Deduplicate {public static void main(String[] args){//todo:1、构建sparkconf,设置配置信息SparkConf conf = new SparkConf().setAppName("Deduplicated Application").setMaster("local[2]");;//todo:2、构建java版的sparkContextJavaSparkContext sc = new JavaSparkContext(conf);//todo:3、读取数据文件JavaRDD<String> dataRDD1 = sc.textFile("data/data1.txt");JavaRDD<String> dataRDD2 = sc.textFile("data/data2.txt");//todo:4、合并数据集JavaRDD<String> dataRDD = dataRDD1.union(dataRDD2);//todo:5、生成<值、" ">键值对JavaPairRDD<String,String> map =dataRDD.mapToPair(new PairFunction<String, String, String>() {public Tuple2<String, String> call(String s) throws Exception {return new Tuple2<String,String >(s,"");//获取数值作为key,空串作为value}});//todo:6、通过合并键去重JavaPairRDD<String,String> result = map.reduceByKey(new Function2<String, String, String>() {@Overridepublic String call(String s, String s2) throws Exception {return s2;}});//todo:7、输出Object[] array = result.collect().toArray();for (Object o : array) {Tuple2<String,String> tuple2 = (Tuple2<String,String>) o;System.out.println(tuple2._1);}}
}

1.4 运行结果展示

二、数据排序

"数据排序"是许多实际任务执行时要完成的第一项工作,比如学生成绩评比、数据建立索引等。这个实例和数据去重类似,都是先对原始数据进行初步处理,为进一步的数据操作打好基础。下面进入这个示例。

2.1 实例描述

对输入文件中数据进行排序。输入文件中的每行内容均为一个数字,即一个数据。要求在输出中每行有两个间隔的数字,其中,第一个代表原始数据在原始数据集中的位次,第二个代表原始数据。

样例输入:

1)file1:

2

32

654

32

15

756

65223

2)file2:

5956

22

650

92

3)file3:

26

54

6

样例输出:

1    2

2    6

3    15

4    22

5    26

6    32

7    32

8    54

9    92

10    650

11    654

12    756

13    5956

14    65223

2.2 解题思路

2.3 代码展示

/*** @Author: xuliushen* @Description:* @Date Created in 2021-09-07 16:00* @Modified by :*/
public class Rank {public static void main(String[] args){//todo:1、构建sparkconf,设置配置信息SparkConf conf = new SparkConf().setAppName("DataRank Application").setMaster("local[2]");;//todo:2、构建java版的sparkContextJavaSparkContext sc = new JavaSparkContext(conf);//todo:3、读取数据文件JavaRDD<String> dataRDD1 = sc.textFile("data/file1.txt");JavaRDD<String> dataRDD2 = sc.textFile("data/file2.txt");JavaRDD<String> dataRDD3 = sc.textFile("data/file3.txt");//todo:4、合并数据集JavaRDD<String> dataRDD = dataRDD1.union(dataRDD2).union(dataRDD3);//todo:5、生成<值、" ">键值对JavaPairRDD<Integer,String> map =dataRDD.mapToPair(new PairFunction<String, Integer, String>() {public Tuple2<Integer, String> call(String s) throws Exception {return new Tuple2<Integer,String >(Integer.parseInt(s)," ");//获取数值作为key,空串作为value}});//todo:6、进行排序JavaPairRDD<Integer,String> result = map.sortByKey();//todo:7、转换成Array并输出Object[] array = result.collect().toArray();for (int i = 0; i < array.length; i++) {Tuple2<Integer,String> tuple2 = (Tuple2<Integer,String>) array[i];System.out.println(i+1+" "+ tuple2._1);}}
}

2.4 运行结果展示

三、平均成绩

"平均成绩"主要目的还是在重温经典"WordCount"例子,可以说是在基础上的微变化版,该实例主要就是实现一个计算学生平均成绩的例子。

3.1 实例描述

对输入文件中数据进行就算学生平均成绩。输入文件中的每行内容均为一个学生的姓名和他相应的成绩,如果有多门学科,则每门学科为一个文件。要求在输出中每行有两个间隔的数据,其中,第一个代表学生的姓名,第二个代表其平均成绩。

样本输入:

1)math:

张三    88

李四    99

王五    66

赵六    77

2)china:

张三    78

李四    89

王五    96

赵六    67

3)english:

张三    80

李四    82

王五    84

赵六    86

样本输出:

张三    82

李四    90

王五    82

赵六    76

3.2 解题思路

3.3 代码展示

/*** @Author: xuliushen* @Description:* @Date Created in 2021-09-07 14:39* @Modified by :*/
public class Average {public static void main(String args[]) {//todo:1、构建sparkconf,设置配置信息SparkConf conf = new SparkConf().setAppName("Average Application").setMaster("local[2]");;//todo:2、构建java版的sparkContextJavaSparkContext sc = new JavaSparkContext(conf);//todo:3、读取数据文件JavaRDD<String> dataRDD1 = sc.textFile("data/math.txt");JavaRDD<String> dataRDD2 = sc.textFile("data/china.txt");JavaRDD<String> dataRDD3 = sc.textFile("data/english.txt");//todo:4、合并数据集JavaRDD<String> lines = dataRDD1.union(dataRDD2).union(dataRDD3);//todo:5、每一行转化为键值对JavaPairRDD<String,Integer> map =lines.mapToPair(new PairFunction<String, String, Integer>() {public Tuple2<String, Integer> call(String s) throws Exception {String[] line = s.split(" ");return new Tuple2<String,Integer >(line[0],Integer.parseInt(line[1]));//获取第一个单词作为key,第二个转化为Long作为value}});JavaPairRDD<String, Tuple2<Integer, Integer>> data3 = map.mapValues(x -> new Tuple2<Integer, Integer>(x, 1));JavaPairRDD<String, Tuple2<Integer, Integer>> data4 = data3.reduceByKey((x, y) -> {return new Tuple2<Integer, Integer>(x._1 + y._1, x._2 + y._2);});JavaPairRDD<String, Integer> data5 = data4.mapToPair(x -> {return new Tuple2<String, Integer>(x._1, x._2._1  / x._2._2);});//todo:6、输出数据System.out.println(data5.collect());}
}

3.4 运行结果展示

四、单表关联

前面的实例都是在数据上进行一些简单的处理,为进一步的操作打基础。"单表关联"这个实例要求从给出的数据中寻找所关心的数据,它是对原始数据所包含信息的挖掘。下面进入这个实例。

4.1 实例描述

实例中给出child-parent(孩子—父母)表,要求输出grandchild-grandparent(孙子—爷奶)表。样例输入如下所示。

file:

child        parent

Tom        Lucy

Tom        Jack

Jone        Lucy

Jone        Jack

Lucy        Mary

Lucy        Ben

Jack        Alice

Jack        Jesse

Terry        Alice

Terry        Jesse

Philip        Terry

Philip        Alma

Mark        Terry

Mark        Alma

家族树状关系谱:

图4.2-1 家族谱

样例输出如下所示。

file:

grandchild        grandparent

Tom            Alice

Tom            Jesse

Jone            Alice

Jone            Jesse

Tom            Mary

Tom            Ben

Jone            Mary

Jone            Ben

Philip             Alice

Philip            Jesse

Mark            Alice

Mark            Jesse

4.2 解题思路

4.3代码展示

/*** @Author: xuliushen* @Description:* @Date Created in 2021-09-07 20:46* @Modified by :*/
public class SingleRelation {public static void main(String[] args){//todo:1、构建sparkconf,设置配置信息SparkConf conf = new SparkConf().setAppName("SingleRelation Application").setMaster("local[2]");;//todo:2、构建java版的sparkContextJavaSparkContext sc = new JavaSparkContext(conf);//todo:3、读取数据文件JavaRDD<String> dataRDD= sc.textFile("data/relation.txt");//去掉第一行Object[] array = dataRDD.collect().toArray();List list = Arrays.asList(array);list = list.subList(1,list.size());//去掉dataRDD = sc.parallelize(list);//todo:4、把每一行映射成为键值对//键值对<child,parent>JavaPairRDD<String,String> map1 =dataRDD.mapToPair(new PairFunction<String, String, String>() {public Tuple2<String, String> call(String s) throws Exception {String[] line = s.split(" ");return new Tuple2<String,String>(line[0],"0"+line[1]);//0表示为父亲//获取第一个单词作为key,第二个转化为Long作为value}});//键值对<parent,child>JavaPairRDD<String,String> map2 =dataRDD.mapToPair(new PairFunction<String, String, String>() {public Tuple2<String, String> call(String s) throws Exception {String[] line = s.split(" ");return new Tuple2<String,String>(line[1],"1"+line[0]);//1表示为孩子//获取第一个单词作为key,第二个转化为Long作为value}});//todo:5、合并JavaPairRDD<String,String> map = map1.union(map2);//todo:6、根据键建立祖孙联系JavaPairRDD<String,String> data1 = map.reduceByKey(new Function2<String, String, String>() {@Overridepublic String call(String s, String s2) throws Exception {return s+" "+s2;}});//todo:7、输出System.out.println("grandchild grandparent");Object[] data2 = data1.collect().toArray();for (Object o : data2) {String relation =((Tuple2<String,String>)o)._2;//取出关系字符串String[] relations = relation.split(" ");List<String> fathers = new ArrayList<>();List<String> childs = new ArrayList<>();int i = 0;for (String s : relations) {if(s.charAt(0) == '0'){//父亲fathers.add(s.substring(1));}else{//孩子childs.add(s.substring(1));}}if(fathers.size()!=0 && childs.size()!=0){for (String child : childs) {for (String father : fathers) {System.out.println(child+" "+father);}}}}}
}

4.4 运行结果展示

Spark Java实战相关推荐

  1. spark项目实战:电商分析平台之各个范围Session步长、访问时长占比统计(需求一)

    spark项目实战:电商分析平台之各个范围Session步长.访问时长占比统计(需求一) 项目基本信息,架构,需要一览 各个范围Session步长.访问时长占比统计概述 各个范围Session步长.访 ...

  2. Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.编译Spark Spark可以通过SBT和Maven两种方式进行编译,再通过make-d ...

  3. Spark入门实战系列--4.Spark运行架构

    注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1. Spark运行架构 1.1 术语定义 lApplication:Spark Applic ...

  4. Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.SparkSQL的发展历程 1.1 Hive and Shark SparkSQL的前身 ...

  5. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Sp ...

  6. Spark案例实战教程

    Spark案例实战 实战代码参考:GitHub - GoAlers/Bigdata_project: 电商大数据项目-推荐系统(java和scala语言) 搭建项目 pom参考 <depende ...

  7. Spark项目实战:大数据实时流处理日志(非常详细)

    实战概览 一.实战内容 二.大数据实时流处理分析系统简介 1.需求 2.背景及架构 三.实战所用到的架构和涉及的知识 1.后端架构 2.前端框架 四.项目实战 1.后端开发实战 1.构建项目 2.引入 ...

  8. 大数据Spark企业级实战 PDF 下载 和目录

    大数据Spark企业级实战  PDF完整版 下载地址 http://download.csdn.net/detail/laoge/9504794 基本信息 书名:大数据Spark企业级实战 定价:12 ...

  9. 【Todo】【读书笔记】大数据Spark企业级实战版 Scala学习

    目录:/Users/baidu/Documents/Data/Interview/Hadoop-Spark-Storm-Kafka 下了这本<大数据Spark企业级实战版>, 另外还有一本 ...

  10. Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.1  运行环境说明 1.1.1 硬软件环境 l  主机操作系统:Windows 64位, ...

最新文章

  1. Day3-python基础3
  2. ContentProvider学习笔记
  3. android 中国通信乱码问题
  4. Java Language Changes for Java SE 9
  5. RxSwift笔记七其他操作符
  6. volatile关键字的作用-适用场景
  7. python新手入门课_Python基础视频12集入门课程
  8. Chrome development tools学习笔记(3)
  9. linux 设备驱动阻塞,深入浅出:Linux设备驱动中的阻塞和非阻塞I/O
  10. 软件工程2第一次作业
  11. SpringBoot:java.lang.NullPointerException
  12. c语言编程编写笑脸,用C语言编写笑脸游戏.doc
  13. Qt使用QChart制作多路虚拟示波器
  14. LMS自适应波束形成算法(MATLAB)
  15. 离散实验一 油管铺设 (求最小生成树的Prim算法的实际应用)
  16. 对比两个自定义对象是否相等
  17. 中级职称计算机excel 公式,中级职称计算机试Excel应用模拟题库.doc
  18. php获取证书编号没有serialNumberHex只有serialNumber处理方法
  19. Verilog中parameter使用
  20. K-hop消息传递图神经网络的表达能力有多强?

热门文章

  1. iphone查看删除的短信_手机里的短信不小心删除了怎么才能恢复?此文为你解答...
  2. c语言如何框出视频或图像中的车辆,视频图像中的车辆检测跟踪和分类
  3. CMU 15-213 Introduction to Computer Systems学习笔记(13) Exceptional Control Flow: Exceptions and Process
  4. dll封装成activex控件_Qt编写自定义控件26-平铺背景控件
  5. c 打印二叉树_基础扩展 | 22. 遍历二叉树—前序遍历算法的VBA代码解析
  6. layui监听radio点击事件
  7. 谈谈数字货币交易系统的发展
  8. 手游开发之lua的class函数详解
  9. scrollTop如何实现click后页面过渡滚动到顶部
  10. [HNOI2005][BZOJ1202] 狡猾的商人