Spark 基础操作
Spark 操作
创建操作(Creation Operation)
用于RDD创建工作。RDD创建只有两种方法,一种是来自于内存集合和外部存储系统,另一种是通过转换操作生成的RDD
转换操作(Transformation Operation)
将RDD通过一定的操作变成新的RDD,比如HadoopRDD可以使用map操作变换为MappedRDD
RDD的转换操作是惰性操作,它只是定义了一个新的RDDs,并没有立即执行
控制操作(Control Operation)
进行RDD持久化,可以让RDD按不同的存储策略保存在磁盘或内存中,比如cache接口默认将RDD缓存在内存中
行动操作(Action Operation)
能够触发Spark运行的操作,例如,对RDD进行collect就是行动操作
Spark中行动操作分为两类,一类的操作结果变成Scala集合或者变量,另一类将RDD保存到外部文件系统或者数据库中
创建操作
parallelize[T](seq:Seq[T], numSlices:Int)
parallelize 在一个已经存在的Scala集合上创建(一个Seq对象)。集合的对象将会被复制,创建出一个可以被并行操作的分布式数据集
makeRDD[T](seq:Seq[(T, Seq[String])]):RDD[T]
并行化集合创建操作
基础转换操作
map[U](f:(T) => U):RDD[U]
map操作是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD,任何原RDD中的元素在新RDD中都有且只有一个元素与之对应
distinct():RDD[(T)]/distinct(nPartitions):RDD[(T)]
distinct操作是去除RDD重复的元素,返回所有元素不重复RDD
flatMap[U](f:(T) => TraversableOnce[U]):RDD[U]
flatMap操作与map类似,区别是原RDD中的每个元素经过map处理后只能生成一个元素,而在flatMap操作中原RDD中的每个元素可生成一个或多个元素来构建RDD
coalesce(numPartitions:Int,shuffle:Boolean = false):RDD[T]
coalesce操作使用HashPartitioner进行重分区,第一个参数为重分区的数目,第二个是否进行shuffle,默认情况为false
repartition(numPartitions:Int):RDD[T]
repartition操作是coalesce函数第二个参数为true的实现
randomSplit(weights:Array[Double], send:Long):Array[RDD[T]]
randomSplit操作是根据weights权重将一个RDD分隔为多个RDD
glom():RDD[Array[T]]
glom操作则是RDD中每一个分区所有类型为T的数据转变成元素为T的数组[Array[T]]
union(other:RDD[T]):RDD[T]
union操作是将两个RDD合并,返回两个RDD的并集,返回元素不去重
intersection(other:RDD[T]):RDD[T]
intersection操作类似SQL中的inner join操作,返回两个RDD交集,返回元素去重
subtract(other:RDD[T]):RDD[T]
subtract 返回在RDD中出现,且不在otherRDD中出现的元素
mapPartitions[U](f:(Iter), preserversPartitons:Boolean)
mapPartitions操作和map操作类似,只不过映射的参数由RDD中的每一个元素变成了RDD中每一个分区的迭代器
其中preserversPartitons表示是否保留父RDD的partitioner分区信息
如果在映射的过程中需要频繁创建额外的对象,使用mapPartitions操作要比map操作高效得多
比如,将RDD中的所有数据通过JDBC连接写入数据库,如果使用map函数,可能要为每一个元素都创建一个connection,这样开销很大
如果使用mapPartitions,那么只需要针对每一个分区建立一个connection
mapPartitionsWithIndex[U](f:(Iter), preserversPartitons:Boolean):RDD[U]
mapPartitionsWithIndex 操作作用类似于mapPartitions,只是输入参数多一个了分区索引
zip[U](other:RDD[U]):RDD[(T,U)]
zip操作用于将两个RDD组合成Key/Value形式的RDD,这里默认两个RDD的partition数量以及元素数量相同,否则会抛出异常
zipPartitions[B,V](rdd2:RDD[B])
zipPartitions 操作将多个RDD按照partition组合成新的RDD,该操作需要组合的RDD具有相同的分区数,但对于每个分区内的元素数量没有要求
zipWithIndex():RDD[(T,Long)]
zipWithIndex操作将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对
zipWithUniqueId():RDD[(T,Long)]
zipWithUniqueId 操作将RDD中的元素和一个唯一ID组合成键/值对,该唯一ID生成算法如下:
- 每个分区中第一个元素的唯一ID值为: 该分区索引号
- 每个分区中第N个元素的唯一ID值为:(前一个元素的唯一ID值) + (该RDD总的分区数)
键值转换操作
partitionBy(partitioner: Partitioner):RDD[(K, V)]
partitionBy 操作根据partitioner函数生成新的ShuffleRDD
mapValues[U](f:(V) => U):RDD[(K, U)]
mapValues类似于map,只不过mapValues是针对[K,V]中的V值进行map操作
flatMapValues[U](f:(V) => TraverableOnce[U]):RDD[(K,U)]
flatMapValues 相对flatMap, flatMapValues是针对[K,V]中的V值进行flatMap操作
combineByKey[C](createCombiner:(V), mergeValue:(C, V), mergeCombiners)
combineByKey 操作用于将RDD[K,V]转换成RDD[K,C].这里V类型和C类型可以相同也可以不同
combineByKey 参数含义
- createCombiner: 组合器函数,用于将V类型转换成C类型,输入参数为RDD[K,V]中的V,输出为C
- mergeValue: 合并值函数,将一个C类型和一个V类型值合并成一个C类型,输入参数为(C,V),输出为C
- mergeCombiners: 合并组合器函数,用于将两个C类型值合并成一个C类型,输入参数为(C,C),输出为C
- numPartitons: 结果RDD分区数,默认保持原有的分区数
- partitioner: 分区函数,默认为HashPartitioner
- mapSideCombine: 是否需要在Map端进行combine操作,类似于MapReduce中的combine,默认为true
foldByKey(zeroValue:V)(func:(V, V)=>V):RDD[(K,V)]
foldByKey 操作用于RDD[K, V]转换K将V做折叠、合并处理。其中参数zeroValue表示先根据映射函数将zeroValue应用于V
进行初始化V,再将映射函数应用于初始化后的V
reduceByKey(func:(V, V) => V):RDD[(K,V)]
reduceByKey操作用于将RDD[K,V]中每个K对应的V值根据映射函数来运算,其中参数numPartitions用于指定分区数,参数partitioner用于指定分区函数
reduceByLocally(func:(V, V) => V):Map[K,V]
reduceByLocally 和 reduceByKey 功能类似,不同的是,reduceByLocally运算结果映射到一个Map[K,V]中,而不是RDD[K,V]
groupByKey():RDD[(K, Iterable[V])]
groupByKey 操作用于将RDD[K,V]中每个K对应的V值合并到一个集合Iterable[V]中
cogroup[W](other:RDD[(K,V)]):RDD[(K,(Iterable[V], Iterable[W]))]
cogroup 相当于SQL中的全外关联,返回左右RDD中的记录,关联不上的为空
可传入的参数有1~3个RDD,参数numPartitons用于指定分区数,参数partitioner用于指定分区函数
join、fullOuterJoin、leftOuterJoin、rightOuterJoin
join、fullOuterJoin、leftOuterJoin、rightOuterJoin 都是针对RDD[K,V]中K值相等的连接操作
分别对应内连接、全连接、左连接和右连接。这些操作都调用cogroup进行实现,subtractByKey和基本操作subtract,只是subtractByKey针对的是键值操作
其中参数numPartions用于指定分区数,参数partitioner用于指定分区函数
控制操作
cache():RDD[T]
缓存
persist():RDD[]
persit(level:StorageLevel):RDD[T]
行动操作
集合标量行动操作
first(): T 表示返回RDD中的第一个元素,不排序
count(): Long 表示返回RDD中的元素个数
reduce(f:(T, T) => T):T
根据映射函数f,对RDD中的元素进行二元计算
collect(): Array[T]
表示将RDD转换成数组
take(num: Int): Array[T]
表示获取RDD中从0到num-1下标的元素,不排序
top(num: Int): Array[T]
表示从RDD中,按照默认(降序)或者指定的排序规则,返回前num个元素
takeOrdered(num: Int): Array[T]
和top类似,只不过以和top相反的顺序返回元素
aggregate[U](zeroValue: U)(seqOp: (U, T) => U, combOp: (U,U) => U)
用户聚合RDD中的元素,先使用seqOp将RDD中每个分区中的T类型聚合成U类型
再使用combOp将之前每个分区聚合后的U类型聚合成U类型,特别注意seqOp和combOp都会使用zeroValue的值,zeroValue的类型的为U
fold(zeroValue: T)(op: (T, T)=>T): Taggregate
fold是aggregate的简化,将aggregate中的seqOp和combOp使用同一个函数op
lookup(key: K): Seq[V]
lookup用于(K,V)类型的RDD,指定K值,返回RDD中该K对应的所有V值
countByKey(): Map[K, Long]
countByKey 统计RDD[K, V]中每个K的数量
foreach(f:(T) => Unit): Unit
foreach 遍历RDD,将函数f应用于每一个元素
要注意如果对RDD执行foreach,只会在Executor端有效,而并不是Driver端
foreachPartition(f:(Iterator[T]) => Unit): Unit
foreachPartition 和 foreach类似,只不过是对每一个分区使用f
sortBy[K](f:(T), ascending:Boolean, numPartitions):RDD[T]
sortBy根据给定的排序k函数将RDD中的元素进行排序
存储行动操作
saveAsTextFile(path: String): Util
saveAsTextFile 用于将RDD以文本文件的格式存储到文件系统中,codec参数可以指定压缩的类名
saveAsTextFile 用于将RDD以SequenceFile的文件格式保存到HDFS上
saveAsObjectFile(path: String): Util
saveAsObjectFile 用于将RDD中的元素序列化对象,存储到文件中,对于HDFS,默认采用SequenceFile保存
saveAsHadoop
saveAsHadoopFile 是将RDD存储在HDFS上的文件中
saveAsHadoopDataset(conf: JobConf): Unit
用于将RDD保存到除了HDFS的其他存储中,比如HBase
在JobConf中,通常需要关注或者设置5个参数: 文件的保存路径、key值的class类型、value值的class类型、RDD的输出格式以及压缩相关参数
相关文章:
Spark 基础操作
Spark 操作 创建操作(Creation Operation) 用于RDD创建工作。RDD创建只有两种方法,一种是来自于内存集合和外部存储系统,另一种是通过转换操作生成的RDD 转换操作(Transformation Operation) 将RDD通过一定的操作变成新的RDD,比如HadoopR…...
VoLTE 微案例:VoLTE 注册失败,I-CSCF 返回 403,HSS(UAR) 返回 5001
目录 1. 问题描述 2. 故障注册流程与正常流程对照 3. 结论 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 cpp 方向修改简历,模拟面试,学习指导都可以添加博主低价指导哈。 1. 问题描述...
智能财务 | 数据与融合,激发企业财务数智化转型思考
数据与融合,激发企业财务数智化转型思考 用友持续深耕企业财务领域,见证中国企业走过了财务电算化、信息化时代,当下共同经历数智化时代。2023 年度,通过走访标杆企业,与高校教授、权威机构学者共同探讨等形式…...
docker 下载netcore 镜像
dotnet-docker/README.runtime.md at main dotnet/dotnet-docker GitHub docker pull mcr.microsoft.com/dotnet/runtime:8.0 docker pull mcr.microsoft.com/dotnet/runtime:3.1...
Ajax:请求 响应
Ajax:请求 & 响应 AjaxjQuery的Ajax接口$.get$.post$.ajax PostMan 接口测试getpost Ajax 浏览器中看到的数据,并不是保存在浏览器本地的,而是实时向服务器进行请求的。当服务器接收到请求,就会发回一个响应,此时浏…...
WebForms DataList 控件深入解析
WebForms DataList 控件深入解析 概述 在 ASP.NET WebForms 的众多服务器控件中,DataList 控件是一个功能强大的数据绑定控件,它允许开发者以表格形式展示和操作数据。DataList 控件类似于 Repeater 控件,但提供了更多的内置布局和样式选项…...
【有啥问啥】DINO:一种改进的去噪锚框的端到端目标检测器
DINO:一种改进的去噪锚框的端到端目标检测器 在目标检测领域,DINO(DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection)是一种创新的端到端目标检测模型,旨在解决传统目标检测算法中的一些关…...
自由学习记录(15)
Java注解 else if的省略问题(可能看花) else if也是取最近的if连通,看上去加了{}就可以正常执行了,缩进要命,不提示真容易看错, 组合数公式和数组参数 在 C 中,数组作为函数参数时,…...
Docker 部署 JDK11 图文并茂简单易懂
部署 JDK11 ( Docker ) [Step 1] : 下载JDK11 - JDK 11 | Oracle 甲骨文官网 [Step 2] : jdk11上传服务器/root/jdk11 可自行创建文件夹 进入目录 /root/jdk11 解压文件 tar -zxvf jdk-11.0.22_linux-x64_bin.tar.gz解压后 进入 /root/jdk11/jdk-11.0.22 创建 jre 文件 ./bi…...
Cisco ASAv虚拟防火墙
EVE-NG模拟器使用Cisco防火墙版本ASAv-9.20.3-PLR-Licensed。配置如下,主要是三个方面,配置管理口地址模式DHCP,配置安全级别;第二,开启http服务器,配置允许访问主机的网段和接口;最后配置用户名…...
w~自动驾驶合集6
我自己的原文哦~ https://blog.51cto.com/whaosoft/12286744 #自动驾驶的技术发展路线 端到端自动驾驶 Recent Advancements in End-to-End Autonomous Driving using Deep Learning: A SurveyEnd-to-end Autonomous Driving: Challenges and Frontiers 在线高精地图 HDMa…...
C/C++ H264文件解析
C实现H264文件以及一段H264码流解析,源码如下: h264Parse.h: #ifndef _H264PARSE_H_ #define _H264PARSE_H_#include <fstream>class H264Parse { public:int open_file(const std::string &filename);/*** brief 从文件中读取一个nalu&…...
【Windows】电脑端口明明没有进程占用但显示端口被占用(动态端口)
TOC 一、问题 重启电脑后,启用某个服务显示1089端口被占用。 查看是哪个进程占用了: netstat -aon | findstr "1089"没有输出,但是换其他端口,是可以看到相关进程的: 现在最简单的方式是给我的服务指定另…...
Redis 持久化 问题
前言 相关系列 《Redis & 目录》(持续更新)《Redis & 持久化 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 持久化 & 总结》(学习总结/最新最准/持续更新)《Redis & …...
vivado 配置
配置 配置指的是将特定应用数据加载到 FPGA 器件的内部存储器的进程。 赛灵思 FPGA 配置数据储存在 CMOS 配置锁存 (CCL) 中,因此配置数据很不稳定,且在每次 FPGA 器件上电后都必须重 新加载。 赛灵思 FPGA 器件可通过配置引脚,自行…...
Java如何实现PDF转高质量图片
大家好,我是 V 哥。在Java中,将PDF文件转换为高质量的图片可以使用不同的库,其中最常用的库之一是 Apache PDFBox。通过该库,你可以读取PDF文件,并将每一页转换为图像文件。为了提高图像的质量,你可以指定分…...
itemStyle.normal.label is deprecated, use label instead.
itemStyle.normal.label is deprecated, use label instead. normal’hierarchy in label has been removed since 4.0. All style properties are configured in label directly now. 错误写法: itemStyle: {normal: {// color: #00E0FF, // 设置折线点颜色 labe…...
如何在 Linux VPS 上保护 MySQL 和 MariaDB 数据库
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 有许多在 Linux 和类 Unix 系统上可用的 SQL 数据库语言实现。MySQL 和 MariaDB 是在服务器环境中部署关系型数据库的两个流行选项…...
CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度
文章目录 box-sizing: border-box; 的含义默认盒模型 (content-box)border-box 盒模型 在微信小程序中的应用示例 在微信小程序中,CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度。具体来说, box-sizing: border-box; 会改…...
预训练 BERT 使用 Hugging Face 和 PyTorch 在 AMD GPU 上
Pre-training BERT using Hugging Face & PyTorch on an AMD GPU — ROCm Blogs 2024年1月26日,作者:Vara Lakshmi Bayanagari. 这篇博客解释了如何从头开始使用 Hugging Face 库和 PyTorch 后端在 AMD GPU 上为英文语料(WikiText-103-raw-v1)预训练…...
鸿蒙是必经之路
少了大嘴的发布会,老实讲有点让人昏昏入睡。关于技术本身的东西,放在后面。 我想想来加把油~ 鸿蒙发布后褒贬不一,其中很多人不太看好鸿蒙,一方面是开源性、一方面是南向北向的利益问题。 不说技术的领先点,我只扯扯…...
Java项目实战II基于微信小程序的马拉松报名系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 马拉松运动…...
家用wifi的ip地址固定吗?换wifi就是换ip地址吗
在探讨家用WiFi的IP地址是否固定,以及换WiFi是否就意味着换IP地址这两个问题时,我们首先需要明确几个关键概念:IP地址、家用WiFi网络、以及它们之间的相互作用。 一、家用WiFi的IP地址固定性 家用WiFi环境中的IP地址通常涉及两类:…...
codeforces _ 补题
C. Ball in Berland 传送门:Problem - C - Codeforces 题意: 思路:容斥原理 考虑 第 i 对情侣组合 ,男生为 a ,女生为 b ,那么考虑与之匹配的情侣 必须没有 a | b ,一共有 k 对情侣&#x…...
DataSophon集成ApacheImpala的过程
注意: 本次安装操作系统环境为Anolis8.9(Centos7和Centos8应该也一样) DataSophon版本为DDP-1.2.1 整合的安装包我放网盘了: 通过网盘分享的文件:impala-4.4.1.tar.gz等2个文件 链接: https://pan.baidu.com/s/18KfkO_BEFa5gVcc16I-Yew?pwdza4k 提取码: za4k 1…...
深入探讨TCP/IP协议基础
在当今数字化的时代,计算机网络已经成为人们生活和工作中不可或缺的一部分。而 TCP/IP 协议作为计算机网络的核心协议,更是支撑着全球互联网的运行。本文将深入探讨常见的 TCP/IP 协议基础,带你了解计算机网络的奥秘。 一、计算机网络概述 计…...
《Windows PE》7.4 资源表应用
本节我们将通过两个示例程序,演示对PE文件内图标资源的置换与提取。 本节必须掌握的知识点: 更改图标 提取图标资源 7.4.1 更改图标 让我们来做一个实验,替换PE文件中现有的图标。如果手工替换,一定是先找到资源表,…...
【重生之我要苦学C语言】猜数字游戏和关机程序的整合
今天来把学过的猜数字游戏和关机程序来整合一下 如果有不明白的可以看往期的博客 废话不多说,上代码: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> void…...
基于centos7脚本一键部署gpmall商城
基于centos7脚本一键部署单节点gpmall商城,该商城可单节点,可集群,可高可用集群部署,VMware17,虚拟机IP:192.168.200.100 将软件包解压到/root目录 [rootlocalhost ~]# ls dist …...
Mac book英特尔系列?M系列?两者有什么区别呢
众所周知,Mac book有M系列,搭载的是苹果自研的M芯片,也有着英特尔系列,搭载的是英特尔的处理器,虽然从 2020 年开始,苹果公司逐步推出了自家研发的 M 系列芯片,并逐渐将 MacBook 产品线过渡到 M…...
兰州新病毒的最新消息/山东关键词优化联系电话
http://ask.zealer.com/post/185 ISP是Image Signal Processor的缩写,全称是影像处理器。在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始信号数据,可以理解为整个相机拍照、录像的第一步处理流程…...
网站推广好做吗/广州网站制作实力乐云seo
public int findTheWinner(int n, int k) {int ans0;for(int i2;i<n;i){//最后的人一定在0位置处,每次去掉一人,他的位置左移k,要想知道他的初始位置则要kans(ansk)%i;}return ans1;}...
精品建设课程网站/短网址链接生成
Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化 原文:Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化[函数名称] P分位法图像二值化 [算法说明] 所谓P分位法图像分割,就是在知道图像中目标所占的比率Ratio时,循环不…...
垃圾网站建设/关键词seo报价
Linux基础实验 过滤,管道与重定向 过滤管道重定向运维常用 给某目录设置权限 sudo chmod -R 777 /var/www/html/ posted 2018-01-30 01:03 douzujun 阅读(...) 评论(...) 编辑 收藏...
世界杯网站建设/网络推广主要工作内容
指针运算 例1 #include <stdio.h>int main (void) {int a 0;int *p &a;printf("%p, %p, %p",p,p1,p2);return 0;}输出结果: **指针变量可以计算,如果int 类型加一,变化4个整数,如果char 加一,…...
常州百度seo/电商网站seo怎么做
本节要解决的问题: 如何定位一组元素? 场景 从上一节的例子中可以看出,webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象, 这时候就需要使用findElements方法。 定位一…...