spark算子知识整理2

Spark算子使用示例 1. 算子分类从大方向来说,Spark 算子大致可以分为以下两类 Transformation:操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算。 Action:会触发 Spark 提交作业(Job),并将数据输出 Spark系统。 从小方向来说,Spark 算子大致可以分为以下三类: Value数据类型的T 阅读详情

前面有关RDD的理论已经说过其中一点就是RDD是由一系列的分区组成,所以RDD也提供了和分区相关的一系列算子,这次需要整理的是分区迭代器、重设分区以及countByKey、groupByKey等算子

package com.debug;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.VoidFunction;

public class UseRDD04 {

	public static void main(String[] args) {
		SparkConf conf=new SparkConf();
		conf.setMaster("local");
		conf.setAppName("WordCountApp");
		
		JavaSparkContext sc=new JavaSparkContext(conf);
		
		
		List<String>  arr=Arrays.asList("上海","北京","昆明","深圳","长沙","合肥");
		JavaRDD<String> rdd1=sc.parallelize(arr,3);
		
		JavaRDD<String> rdd2=rdd1.mapPartitionsWithIndex(new Function2<Integer, Iterator<String>, Iterator<String>>() {

			public Iterator<String> call(Integer index, Iterator<String> iter) throws Exception {
				List<String> arr=new ArrayList<>();
				while(iter.hasNext()) {
					arr.add(iter.next()+"-"+index);
				}
				return arr.iterator();
			}
		
		},true);
		
		JavaRDD<String> rdd3=rdd2.coalesce(2, false);
		
		rdd3.foreach(new VoidFunction<String>() {
			
			public void call(String city) throws Exception {
				System.out.println(city);
				
			}
		});
		
		sc.stop();

	}

}

这里需要注意理解的是coalesce()方法和rePartition()方法,区别是coalesce()方法的参数shuffle默认设置为false,repartition()方法就是coalesce()方法shuffle为true的情况;shuffle就是磁盘的数据写入和读取的过程,如果为宽依赖则有shuffle过程,窄依赖则没有。如有疑问可以参考下面的文章

https://blog.youkuaiyun.com/lzq20115395/article/details/80602071

接下来再补充两个算子,作为算子知识整理的最后一段代码

package com.debug;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.VoidFunction;

import scala.Tuple2;

public class UseRDD06 {

	public static void main(String[] args) {
		SparkConf conf=new SparkConf();
		conf.setMaster("local");
		conf.setAppName("rdd06");
		
		JavaSparkContext sc=new JavaSparkContext(conf);
		
		List<Tuple2<String, Integer>> arr=Arrays.asList(
				new Tuple2<String, Integer>("u1", 20),
				new Tuple2<String, Integer>("u1", 15),
				new Tuple2<String, Integer>("u2", 18),
				new Tuple2<String, Integer>("u3", 20),
				new Tuple2<String, Integer>("u4", 20),
				new Tuple2<String, Integer>("u5", 100)
		);
		JavaPairRDD<String, Integer> rdd=sc.parallelizePairs(arr);
		
		Map<String,Object> m=rdd.countByKey();
		Set<Entry<String, Object>> se=m.entrySet();
		for(Entry<String, Object> en:se) {
			String key=en.getKey();
			String value=en.getValue().toString();
			
			System.out.println(key+","+value);
		}
		
		JavaPairRDD<String, Iterable<Integer>> rdd2=rdd.groupByKey();
		rdd2.foreach(new VoidFunction<Tuple2<String,Iterable<Integer>>>() {
			
			public void call(Tuple2<String, Iterable<Integer>> tup) throws Exception {
				System.out.println(tup);
				
			}
		});
		
		sc.stop();

	}

}

reduceByKey和groupByKey在本人看来区别主要是reduceByKey会对分组好的数据进行计算,groupByKey则只是分好组不作计算

 

Spark 中算子功能与分类介绍 最近看了一些SPARK资料,还没有系统性的整理,这里先归纳一下spark中算子的总结。如有什么错误或者不妥之处,希望大神们指出,相互交流共同进步!!哈哈哈 算子的定义:RDD中定义的函数,可以对RDD中的数据进行转换和操作。 下面根据算子类型的分类进行总结: 阅读详情

相关推荐

Spark SQL DataFrame 算子

DataFrame 算子与 SQL 查询语句之间,并没有优劣之分,他们可以实现同样的数据应用,而且在执行性能方面也是一致的。因此,你可以结合你的开发习惯与偏好,自由地在两者之间进行取舍。DataFrame 本身支持的算子之外,在功能上,SQL 完全可以实现同样的数据分析。给定 DataFrame,你只需通过 createTempView 或是 createGlobalTempView 来创建临时表,然后就可以通过写 SQL 语句去进行数据的探索、倾斜、转换与分析。

2401_84052244的博客 3590

SparkJavaAPI例子

1、join 的使用 将一组数据转化为RDD后,分别创造出两个PairRDD,然后再对两个PairRDD进行归约(即合并相同Key对应的Value), 元素集合1: {(1, 1), (2, 4), (3, 9), (4, 16), (5, 25)} 元素集合2: {(1, A), (2, D), (3, I), (4, P), (5, Y)} 集合1和集合2进行join: {(1, (1, A)), (2, (4, D)), (3, (9, I)), (4, (16, P)), (5, (25.

晚风中的自由 671

Spark常见算子总结

官方文档上列举共有32种常见算子,包括Transformation的20种操作和Action的12种操作。 内容自己用心整理,看我的就够了 Transformation: 1.map map的输入变换函数应用于RDD中所有元素,而mapPartitions应用于所有分区。区别于mapPartitions主要在于调用粒度不同。如parallelize(1 to 10, 3),map函数执行10次,而...

u010920561的博客 725

spark 持久化 mysql_请大神指点,持久化到MySql中 VoidFunction报错

wordcounts.foreachRDD(new VoidFunction > (){private static final long serialVersionUID = 1L;@Overridepublic void call(JavaPairRDD wordcountsRDD)throws Exception {wordcountsRDD.foreachPartition(new...

weixin_36251341的博客 181

算子理论基础知识

北邮 算子理论 课程ppt集合 超级有用哦 算子:人们试图用统一的方法去处理经 典分析中各领域分散研究的一些问题, 比如:变分法,积分方程,正交函数 系,逼近论等。 • 算子理论用抽象的形式和统一的方法对 一些表面上看起来很不相同的对象进行 加工,不仅使经典的分析中的概念更加 一般化,而且能够富有成效地解决问题。

Dynamics 365 On-Premise Server v9.0部署体验

期盼已久的Dynamics 365 On-Premise的版本升级终于在11月初姗姗来迟。 11月2日起已经可以在官方渠道下载正式版的Dynamics 365 Server v9.0安装文件,版本号9.0.2,随手附上中文版安装文件下载地址。 想必已经有不少小伙伴开始尝试各种升级、安装了吧。 Dynamics 365 On-Premise的安装过程,度娘一下已经有很多了,这里就不赘述了,只是...

Roger的专栏 2140

Spark06: 共享变量(广播变量、累加变量)

Spark提供的Accumulator,主要用于多个节点对一个变量进行共享性的操作。正常情况下在Spark的任务中,由于一个算子可能会产生多个task并行执行,所以在这个算子内部执行的聚合计算都是局部的,想要实现多个task进行全局聚合计算,此时需要使用到Accumulator这个共享的累加变量。大家可以想象一个极端情况,如果map算子有10个task,恰好这10个task还都在一个worker节点上,那么这个时候,map算子使用的外部变量就会在这个worker节点上保存10份,这样就很占用内存了。

anglemanyi的博客 632

快手极速版抓包实战:安卓/iOS双端获取client_salt全流程解析(避坑指南)

本文详细解析了在安卓和iOS平台上获取快手极速版关键参数`client_salt`的全流程,包括环境配置、抓包工具使用、参数识别与转换等实战技巧。特别针对双端差异和反抓包机制提供了避坑指南,帮助开发者高效安全地完成数据获取任务。

weixin_29021195的博客 714

spark中transformation操作的各种算子(java版)

package cn.spark.study.core;import java.util.Arrays; import java.util.Iterator; import java.util.List;import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apa

kongshuchen的博客 5373

maya后台批量比对maya文件层级

在cg制作过程中,为了统一制作规范,提高效率我们Pipeline都会制作一个比对层级的工具下面介绍的是maya利用batch文件进行模型与绑定和材质文件进行比对层级。 直接上代码: #!usr/bin/env python # -*- encoding: utf-8 -*- """ @author:MCC @file: compareUI @time: 2018/11/21 16:29 """ i...

CGpipelineTD 1643

ChatGPT搭配Claude 4写文献综述效果出奇的好!四步法直接写出逻辑清晰、层次分明的文献综述(附复制即用专业提示词)

请梳理【研究领域】中核心理论的发展演进过程,包括每一阶段理论的核心观点、提出背景与推动力,并指出理论演化中的关键节点或范式转变。请根据以下文献摘要内容,帮助我梳理该主题的研究趋势,包括:常见研究视角、研究方法的演变、研究对象的变化方向等。请根据以下研究空白与我已有的研究基础,帮我生成一个清晰的研究定位,包括:研究主题、研究对象、方法路径和理论框架。先要明确这个研究领域中一个主导或热门的理论,比如社会支持理论、认知负荷理论等,强调这个理论内部的不一致性、适用性争议,通过交代这⼀争议的背景,引发读者兴趣。

智能AI让学术科研更容易 569

spark中RDD算子分类整理

一、transaction算子/action算子 spark的算子可以分为transaction算子以及action算子,变换/转换算子,这种变换并不触发提交作业,完成作业中间过程处理。就是transaction算子,相反执行这个RDD时会触发 SparkContext 提交 Job 作业,那么它就是action算子。transaction算子会懒执行,action会立即执行当前算子以及当前算子...

yrsg666的博客 7752

《网络安全自学教程》- Nmap使用及扫描原理分析

使用Nmap进行端口扫描、主机发现、服务识别、操作系统识别、指定脚本、结果导出文件,使用wireshark抓包分析扫描原理。

wangyuxiang946的博客 1万+

Spark中的常见算子

Spark中的常见算子---触发算子、转换算子。哪些算子能触发shuffle过程

m0_56341622的博客 2319

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 203

v86.01 鸿蒙内核源码分析 (静态分配篇) | 很简单的一位小朋友 | 百篇博客分析 OpenHarmony 源码

相比动态分配,静态内存池的分配就是个小弟弟,非常的简单,两个结构体 + 一张图 就能说明白。

日拱一卒,力出一孔 775

spark算子知识整理1

上一次分享提到的map、flatmap都归属于转换算子,foreach则属于Action算子;由于算在在spark中较为重要后续几次都是分享算子相关的东西,先来看一段代码 package com.debug; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apac...

技术成就梦想 419

【FPGA教程案例55】深度学习案例2——基于FPGA的CNN卷积神经网络之ReLu激活层verilog实现

在本课程中,我们将对CNN的ReLu函数模块的FPGA实现做详细的介绍和学习。从仿真结果可知,通过Rule激活函数之后,小于的输入数据输出为0,否则输出是输入本身。,我们对CNN的基本原理有了初步认识。ReLu函数具备如下优缺点。按照课程1相似的操作方式。

FPGA/MATLAB学习教程/源码/项目合作开发 2694

Spark 之RDD算子的整理

RDD算子分类,大致可以分为两类,即: Transformation:转换算子,这类转换并不触发提交作业,完成作业中间过程处理。 Action:行动算子,这类算子会触发SparkContext提交Job作业。 一:Transformation:转换算子 map: 将原来RDD的每个数据项通过map中的用户自定义函数f映射转变为一个新的元素。源码中map算子相当于初始化一个RDD,新...

Hdmtc123的博客 297

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Spark 算子

文章目录1、转换算子1.1 map1.2 mapPartitions1.3 mapPartitionsWithIndex1.4 flatMap1.5 glom1.6 groupBy1.7 filter1.8 sample1.8.1 抽取数据不放回(伯努利算法)1.8.2 抽取数据放回(泊松算法)1.9 distinct1.10 coalesce1.11 repartition1.12 sortBy1.13 intersection1.14 union1.15 subtract1.16 zip1.17 pa

小小鱼 574

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

spark常用的算子API

转换算子(Transformation): map(func) :返回一个新的分布式数据集,由每个原元素经过func函数转换后组成。 mapPartitions(func): 与map类似,但map中的func作用的是RDD中的每个元素,而mapPartitions中的func作用的对象是RDD的一整个分区。所以func的类型是Iterator&lt;T&gt; =&gt;Iter...

qq_29763559的博客 488

Spark知识点整理

Spark知识点整理 版本:Spark-2.1.1 Spark架构 Spark架构主要包含如下角色: Driver: 主计算进程,Spark job的驱动器 Executor: 执行器,Worker上的计算进程 Cluster Master: 主节点,在standalone模式中为主节点,控制整个集群,监控Worker. 在Yarn模式中充当资源管理器(Resource Manager) Worker: 从节点,负责控制计算节点,启动Executor或Driver Driver Spark的驱动器是执行

da_kao_la的博客 689

Spark整理笔记二:算子详解

算子 学习spark之前,强烈建议先学习scala。学过java,再学scala不难,看两三天教程就能看会基本操作了。这对学习spark的使用会事半功倍。scala和java的一些写法还是存在很多不同点的。 Map: 可以进行计算以及格式转化,对每一条数据操作 // 进行计算 def mapTest={ val conf = new SparkConf().setMaster("...

OutRoading的博客 521

Spark学习(六)常用算子整理

常用算子1、MapPartition2、Map3、MapPartitionWithIndex4、getNumPartitions5、coalesce6、union7、zip8、zipWitIndex9、zipWithUniqueId10、take(n)11、first12、combineByKey 1、MapPartition 遍历的单位是每一个partition。 遍历原理:将每一个partit...

滴水穿石的博客 833

Spark Action 算子

1、reduce(func) 作用:通过func函数聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据。 2、collect() 作用:在驱动程序中,以数组的形式返回数据集的所有元素。 3、count() 作用:返回RDD中元素的个数 4、first() 作用:返回RDD中的第一个元素 5、take(n) 作用:返回一个由RDD的前n个元素组成的数组 6、takeOrdered(n) 作用...

weixin_43078951的博客 338

spark笔记(二)之RDD常用算子

大家好!下面是我在疫情假期期间学习的saprk算子笔记,刚刚用了一下午的时间把它整理出来分享给大家!码字实属不易如果对你有帮助,记得点赞呦! 文章目录一.spark行动算子二.spark单value类型三.spark双value类型四.spark算子KV类型 一.spark行动算子 1.reduce( f: (T, T) => T ):通过func函数聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据。 val list1: RDD[Int] = sc.makeRDD(1 to 10) val

weixin_44604159的博客 1535
上一篇: spark持久化
下一篇: SparkSql使用入门
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值