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 ...
随机推荐
- LockSupport的深入浅出
public static void main(String[] args)throws Exception { final Object obj = new Object(); Thread A = ...
- Spring-构造注入&注解注入&代理模式&AOP
1. 课程介绍 1. 依赖注入;(掌握) 2. XML自动注入;(掌握) 3. 全注解配置;(掌握) 4. 代理模式;(掌握) 5. AOP;(掌握) 依赖注入;(掌握) 2.1. 构 ...
- WebService 适用场合
适用场合 1.跨防火墙通信 如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题.因为客户端和服务器之间通常会有防火墙或者代理服 务器.在这种情况下,使用D ...
- 使用lua+redis解决发多张券的并发问题
前言 公司有一个发券的接口有并发安全问题,下面列出这个问题和解决这个问题的方式. 业务描述 这个接口的作用是给会员发多张券码.涉及到4张主体,分别是:用户,券,券码,用户领取记录. 下面是改造前的伪代 ...
- Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解
系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...
- Linux Shell 编程基础详解——吐血整理,墙裂推荐!
第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...
- VSCode运行时弹出powershell
问题 安装好了vscode并且装上code runner插件后,运行代码时总是弹出powershell,而不是在vscode底部终端 显示运行结果. 解决方法 打开系统cmd ,在窗口顶部条右击打开属 ...
- oracle查看用户的系统权限,角色以及数据库对象权限
select * from dba_sys_privs where GRANTEE='monkey'; select * from dba_role_privs where GRANTEE='monk ...
- 计算机之路 -MySQL 初学
照着电脑学了一天终于把MySQL装上了. 明天打算重新装一次 然后再自己记录一下步骤
- win32 sdk 环境下创建状态栏
今天在学习状态栏,出了好多的问题,这里记录下. 要创建状态栏用:CreateStatusWindow CreateStatusWindow函数创建一个状态窗口,通常用于显示应用程序的状态.窗口通常显示 ...