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 ...
随机推荐
- esx.problem.hyperthreading.unmitigated
是因为VMware新发布的一个漏洞补丁导致的具体解释可参阅VMware官方kb,有详细解释和版本说明. 可选择屏蔽该问题告警 选中主机>配置>高级系统设置>编辑>修改" ...
- 每日一个linux命令5 -- rm
rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件均保持不变. rm是一个危险的命 ...
- Redis学习之路(二)Redis集群搭建
一.Redis集群搭建说明 基于三台虚拟机部署9个节点,一台虚拟机三个节点,创建出4个master.4个slave的Redis集群. Redis 集群搭建规划,由于集群至少需要6个节点(3主3从模式) ...
- 在.NET Core中使用Channel(一)
我最近一直在熟悉.net Core中引入的新Channel<T>类型.我想在它第一次发布的时候我了解过它,但是有关文章非常非常少,我不能理解它们与其他队列有什么不同. 在使用了一段时间后, ...
- CentOS 7 网卡注释
TYPE=Ethernet # 网络类型为:EthernetPROXY_METHOD=none # 代理方式:关闭状态BROWSER_ONLY=no # 只是浏览器:否BOOTPROTO=static ...
- Laya 踩坑日记-BitmapFont 不显示空格
项目中有用到艺术字,美术通过 bmfont64 将字体导给我了,结果发现在应用上 空格不显示 如图: 今天去深究了一下这个问题,发现是底层没封装好,然后自己改了一下下面是改过的 BitmapFont ...
- 【ORA】ORA-01078和LRM-00109 解决方法
今天切换到asm实例的时候,发现是一个空实例,尝试启动实例,结果报错ORA-01078和LRM-00109 SQL> startupORA-01078: failure in processin ...
- Web安全之CSRF(跨站请求伪造)
CSRF(跨站请求伪造)概述 Cross-site request forgery 简称为"CSRF",在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺 ...
- SVM 支持向量机算法-原理篇
公号:码农充电站pro 主页:https://codeshellme.github.io 本篇来介绍SVM 算法,它的英文全称是 Support Vector Machine,中文翻译为支持向量机. ...
- web dynpro配置注意事项
如果你想使用web dynpro 开发的应用,但是发现浏览器报错,那么你按照下面的步骤逐一进行检查吧.特别是返回的500错误,或者是你发现浏览器的地址栏中以http://<hostname> ...