Spark练习之action操作开发
Spark练习之action操作开发
一、reduce
1.1 Java
private static void reduce() {
//创建SparkConf
SparkConf conf = new SparkConf()
.setAppName("reduce")
.setMaster("local");
//创建JavaSparkContext
JavaSparkContext sc = new JavaSparkContext(conf);
//构造集合
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
//并行化集合,创建初始RDD
JavaRDD<Integer> numberRDD = sc.parallelize(numbers);
//使用reduce操作对集合中的数字进行累加
//reduce操作的原理:
//将第一个和第二个元素,传入call()方法,进行计算,会获取一个结果
//接着将该结果与下一个元素传入call()方法,进行计算
//以此类推
//reduce操作的本质:就是聚合,将多个元素聚合成一个元素
int sum = numberRDD.reduce(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});
System.out.println(sum);
//关闭JavaSparkContext
sc.close();
}
1.2 Scala
def reduce(): Unit = {
val conf = new SparkConf().setAppName("reduce").setMaster("local")
val sc = new SparkContext(conf)
val numbersArray = Array(1, 2, 3, 4, 5, 6, 7, 8)
val numberRDD = sc.parallelize(numbersArray, 1)
val numbers = numberRDD.reduce(_ + _)
println(numbers)
}
二、collect
2.1 Java
private static void collect() {
//创建SparkConf
SparkConf conf = new SparkConf()
.setAppName("collect")
.setMaster("local");
//创建JavaSparkContext
JavaSparkContext sc = new JavaSparkContext(conf);
//构造集合
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
//并行化集合,创建初始RDD
JavaRDD<Integer> numberRDD = sc.parallelize(numbers);
//使用map操作将集合中所有数字乘以2
JavaRDD<Integer> doubleNumbers = numberRDD.map(new Function<Integer, Integer>() {
@Override
public Integer call(Integer v1) throws Exception {
return v1 * 2;
}
});
//不用foreach action操作,在远程集群上遍历RDD中的元素
//使用collect操作,将分布在远程集群上的doubleNumber RDD的数据拉取到本地
//这种方式,一般不建议使用,因为如果RDD中的数据量笔记大,比如过万条
//性能会比较差,因为要从远程走大量的网络传输,将数据获取到本地
//此外,还可能在RDD中数据量特别大的情况下,发生oom异常,内存溢出
//因此,通常还是使用foreach action操作,来对最终的元素进行处理
List<Integer> doubleNumberList = doubleNumbers.collect();
for (Integer num : doubleNumberList) {
System.out.println(num);
}
//关闭JavaSparkContext
sc.close();
}
2.2 Scala
def collect(): Unit = {
val conf = new SparkConf().setAppName("collect").setMaster("local")
val sc = new SparkContext(conf)
val numbersArray = Array(1, 2, 3, 4, 5, 6, 7, 8)
val numberRDD = sc.parallelize(numbersArray, 1)
val numbers = numberRDD.map(num => num * 2)
val doubleNumberArray = numbers.collect()
for (num <- doubleNumberArray) {
println(num)
}
}
三、count
3.1 Java
private static void count() {
//创建SparkConf
SparkConf conf = new SparkConf()
.setAppName("count")
.setMaster("local");
//创建JavaSparkContext
JavaSparkContext sc = new JavaSparkContext(conf);
//构造集合
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
//并行化集合,创建初始RDD
JavaRDD<Integer> numberRDD = sc.parallelize(numbers);
//对RDD使用count操作,统计它有多少个元素
long count = numberRDD.count();
System.out.println(count);
//关闭JavaSparkContext
sc.close();
}
3.2 Scala
def count(): Unit = {
val conf = new SparkConf().setAppName("count").setMaster("local")
val sc = new SparkContext(conf)
val numbersArray = Array(1, 2, 3, 4, 5, 6, 7, 8)
val numberRDD = sc.parallelize(numbersArray, 1)
val count = numberRDD.count()
println(count)
}
四、take
4.1 Java
private static void take() {
//创建SparkConf
SparkConf conf = new SparkConf()
.setAppName("take")
.setMaster("local");
//创建JavaSparkContext
JavaSparkContext sc = new JavaSparkContext(conf);
//构造集合
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
//并行化集合,创建初始RDD
JavaRDD<Integer> numberRDD = sc.parallelize(numbers);
//对RDD使用take操作
//take与collect类似,从远程集群上,获取RDD数据
//collect是获取RDD的所有数据,take知识获取前n个数据
List<Integer> top3Numbers = numberRDD.take(3);
for (Integer num : top3Numbers) {
System.out.println(num);
}
//关闭JavaSparkContext
sc.close();
}
4.2 Scala
def take(): Unit = {
val conf = new SparkConf().setAppName("take").setMaster("local")
val sc = new SparkContext(conf)
val numbersArray = Array(1, 2, 3, 4, 5, 6, 7, 8)
val numberRDD = sc.parallelize(numbersArray, 1)
val doubleNumberArray = numberRDD.take(3)
for (num <- doubleNumberArray) {
println(num)
}
}
五、saveAsTextFile
5.1 Java
private static void saveAsTextFile() {
//创建SparkConf
SparkConf conf = new SparkConf()
.setAppName("saveAsTextFile")
.setMaster("local");
//创建JavaSparkContext
JavaSparkContext sc = new JavaSparkContext(conf);
//构造集合
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
//并行化集合,创建初始RDD
JavaRDD<Integer> numberRDD = sc.parallelize(numbers);
//使用map操作将集合中所有数字乘以2
JavaRDD<Integer> doubleNumbers = numberRDD.map(new Function<Integer, Integer>() {
@Override
public Integer call(Integer v1) throws Exception {
return v1 * 2;
}
});
//直接将RDD中的数据,保存在文件中
doubleNumbers.saveAsTextFile("");
//关闭JavaSparkContext
sc.close();
}
六、countByKey
6.1 Java
private static void countByKey() {
//创建SparkConf
SparkConf conf = new SparkConf()
.setAppName("countByKey")
.setMaster("local");
//创建JavaSparkContext
JavaSparkContext sc = new JavaSparkContext(conf);
//构造集合
List<Tuple2<String, String>> scoresList = Arrays.asList(
new Tuple2<>("class1", "tom"),
new Tuple2<>("class2", "jack"),
new Tuple2<>("class1", "leo"),
new Tuple2<>("class2", "marry"));
//并行化集合,创建JavaPairRDD
JavaPairRDD<String, String> students = sc.<String, String>parallelizePairs(scoresList);
//对RDD应用countByKey操作,统计每个班级的学生人数,就是统计每个key对应的元素个数
//countByKey返回的类型,直接就是Map<String,Object>
Map<String, Long> studentCounts = students.countByKey();
for (Map.Entry<String, Long> studentCount : studentCounts.entrySet()) {
System.out.println(studentCount.getKey() + ":" + studentCount.getValue());
}
//关闭JavaSparkContext
sc.close();
}
6.2 Scala
def countByKey(): Unit = {
val conf = new SparkConf().setAppName("countByKey").setMaster("local")
val sc = new SparkContext(conf)
val studentList = Array(new Tuple2[String, String]("class1", "aaa"),
new Tuple2[String, String]("class2", "mack"),
new Tuple2[String, String]("class1", "tom"),
new Tuple2[String, String]("class2", "pos"))
val scores = sc.parallelize(studentList, 1)
val students = scores.countByKey()
println(students)
}
七、foreach
八、main函数
8.1 Java
public static void main(String[] args) {
//reduce();
//collect();
//count();
//take();
//saveAsTextFile();
countByKey();
}
8.2 Scala
def main(args: Array[String]): Unit = {
//reduce()
//collect()
//count()
//take()
countByKey()
}
Spark练习之action操作开发的更多相关文章
- Spark练习之Transformation操作开发
Spark练习之Transformation操作开发 一.map:将集合中的每个元素乘以2 1.1 Java 1.2 Scala 二.filter:过滤出集合中的偶数 2.1 Java 2.2 Sca ...
- spark transformation与action操作函数
一.Transformation map(func) 返回一个新的分布式数据集,由每个原元素经过函数处理后的新元素组成 filter(func) 返回一个新的数据集,经过fun函数处理后返回值为tru ...
- 06、action操作开发实战
1.reduce: 2.collect: 3.count: 4.take: 5.saveAsTextFile: 6.countByKey: 7.foreach: package sparkcore.j ...
- Spark常用函数讲解之Action操作
摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行操作,一个RDD代表一个分区里的数据集RDD有两种操作算子: Trans ...
- Spark RDD概念学习系列之Pair RDD的action操作
不多说,直接上干货! Pair RDD的action操作 所有基础RDD 支持的行动操作也都在pair RDD 上可用
- Spark RDD概念学习系列之action操作
不多说,直接上干货! action操作
- spark 学习_rdd常用操作
[spark API 函数讲解 详细 ]https://www.iteblog.com/archives/1399#reduceByKey [重要API接口,全面 ] http://spark.apa ...
- 【转】Spark Streaming和Kafka整合开发指南
基于Receivers的方法 这个方法使用了Receivers来接收数据.Receivers的实现使用到Kafka高层次的消费者API.对于所有的Receivers,接收到的数据将会保存在Spark ...
- Spark Streaming中的操作函数分析
根据Spark官方文档中的描述,在Spark Streaming应用中,一个DStream对象可以调用多种操作,主要分为以下几类 Transformations Window Operations J ...
随机推荐
- #3使用html+css+js制作网页 番外篇 制作接收php
使用html+css+js制作网页 番外篇 制作接收php 本系列链接 基础 php语法 例子 本系列链接 #1使用html+css+js制作网站教程 准备 #2使用html+css+js制作网站教程 ...
- 面试官:你真的了解Redis分布式锁吗?
什么是分布式锁 说到Redis,我们第一想到的功能就是可以缓存数据,除此之外,Redis因为单进程.性能高的特点,它还经常被用于做分布式锁. 锁我们都知道,在程序中的作用就是同步工具,保证共享资源在同 ...
- 使用正则表达式和urllib模块爬取最好大学排名信息
题目 使用urllib模块编程实现爬取网站的大学排名. (网址:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html) (1)获取网站页面,分析代 ...
- Spring框架之websocket源码完全解析
Spring框架之websocket源码完全解析 Spring框架从4.0版开始支持WebSocket,先简单介绍WebSocket协议(详细介绍参见"WebSocket协议中文版" ...
- linux之平均负载(学习笔记非原创)
什么是平均负载 [root@111 ~]# uptime 11:03:33 up 149 days, 17:34, 1 user, load average: 0.08, 0.05, 0.01 最后三 ...
- Linux echo和cat和grep和tr的基础用法
Linux vim 搜索 echo : 显示输出功能 echo oldboy>1.txtx cat 1.txtx > 重定向 文件内容覆盖 >> 追加重定向 ...
- File Inclusion - Pikachu
概述: 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中,提供了: include(),inclu ...
- 使用.net中的API网关模式封装微服务
在本文中,我们将了解如何使用API网关模式来封装微服务并抽象出底层实现细节,从而允许使用者拥有进入我们系统的一致入口点. 为了构建和测试我们的应用程序,我们需要: 1.Visual Studio 20 ...
- 数据库 | 001-MySQL梳理系列(一)
MySQL基本组成 SQL执行流程 Server 层主要包括连接器.查询缓存.分析器.优化器.执行器,包含了MySQL主要的很多核心功能,以及所有的内置函数.存储过程.触发器.视图等,其实就是所有跨存 ...
- 使用bandit对目标python代码进行安全函数扫描
技术背景 在一些对python开源库代码的安全扫描中,我们有可能需要分析库中所使用到的函数是否会对代码的执行环境造成一些非预期的影响.典型的例如python的沙箱逃逸问题,通过一些python的第三方 ...