一、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操作开发的更多相关文章

  1. Spark练习之Transformation操作开发

    Spark练习之Transformation操作开发 一.map:将集合中的每个元素乘以2 1.1 Java 1.2 Scala 二.filter:过滤出集合中的偶数 2.1 Java 2.2 Sca ...

  2. spark transformation与action操作函数

    一.Transformation map(func) 返回一个新的分布式数据集,由每个原元素经过函数处理后的新元素组成 filter(func) 返回一个新的数据集,经过fun函数处理后返回值为tru ...

  3. 06、action操作开发实战

    1.reduce: 2.collect: 3.count: 4.take: 5.saveAsTextFile: 6.countByKey: 7.foreach: package sparkcore.j ...

  4. Spark常用函数讲解之Action操作

    摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行操作,一个RDD代表一个分区里的数据集RDD有两种操作算子:         Trans ...

  5. Spark RDD概念学习系列之Pair RDD的action操作

    不多说,直接上干货! Pair RDD的action操作 所有基础RDD 支持的行动操作也都在pair RDD 上可用

  6. Spark RDD概念学习系列之action操作

    不多说,直接上干货! action操作  

  7. spark 学习_rdd常用操作

    [spark API 函数讲解 详细 ]https://www.iteblog.com/archives/1399#reduceByKey [重要API接口,全面 ] http://spark.apa ...

  8. 【转】Spark Streaming和Kafka整合开发指南

    基于Receivers的方法 这个方法使用了Receivers来接收数据.Receivers的实现使用到Kafka高层次的消费者API.对于所有的Receivers,接收到的数据将会保存在Spark ...

  9. Spark Streaming中的操作函数分析

    根据Spark官方文档中的描述,在Spark Streaming应用中,一个DStream对象可以调用多种操作,主要分为以下几类 Transformations Window Operations J ...

随机推荐

  1. LockSupport的深入浅出

    public static void main(String[] args)throws Exception { final Object obj = new Object(); Thread A = ...

  2. Spring-构造注入&注解注入&代理模式&AOP

    1.   课程介绍 1.  依赖注入;(掌握) 2.  XML自动注入;(掌握) 3.  全注解配置;(掌握) 4.  代理模式;(掌握) 5.  AOP;(掌握) 依赖注入;(掌握) 2.1.  构 ...

  3. WebService 适用场合

    适用场合 1.跨防火墙通信 如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题.因为客户端和服务器之间通常会有防火墙或者代理服 务器.在这种情况下,使用D ...

  4. 使用lua+redis解决发多张券的并发问题

    前言 公司有一个发券的接口有并发安全问题,下面列出这个问题和解决这个问题的方式. 业务描述 这个接口的作用是给会员发多张券码.涉及到4张主体,分别是:用户,券,券码,用户领取记录. 下面是改造前的伪代 ...

  5. Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

  6. Linux Shell 编程基础详解——吐血整理,墙裂推荐!

    第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...

  7. VSCode运行时弹出powershell

    问题 安装好了vscode并且装上code runner插件后,运行代码时总是弹出powershell,而不是在vscode底部终端 显示运行结果. 解决方法 打开系统cmd ,在窗口顶部条右击打开属 ...

  8. oracle查看用户的系统权限,角色以及数据库对象权限

    select * from dba_sys_privs where GRANTEE='monkey'; select * from dba_role_privs where GRANTEE='monk ...

  9. 计算机之路 -MySQL 初学

    照着电脑学了一天终于把MySQL装上了. 明天打算重新装一次 然后再自己记录一下步骤

  10. win32 sdk 环境下创建状态栏

    今天在学习状态栏,出了好多的问题,这里记录下. 要创建状态栏用:CreateStatusWindow CreateStatusWindow函数创建一个状态窗口,通常用于显示应用程序的状态.窗口通常显示 ...