Spark Programming Guide(三)

Spark编程指南(Spark Programming Guide) 作者:禅与计算机程序设计艺术 1.简介 Spark是一个开源的快速、通用、可扩展的大数据处理系统,它提供了Java、Scala、Python、R等多语言API,可以运行在Hadoop、Apache Spark、Kubernetes、Mesos等分布式计算集群上,提供高吞吐量、低延迟的数据分析处理能力。S 阅读详情
Working with Key-Value Pairs

While most Spark operations work on RDDs containing any type of objects, a few special operations are only available on RDDs of key-value pairs. The most common ones are distributed “shuffle” operations, such as grouping or aggregating the elements by a key.

大多数Spark操作可以使用RDDs包含不同的数据类型来完成,一些少数特殊的操作可以使用键值对的RDDs。最常见的是分布式 “shuffle” 操作,如通过元素的 key 来进行 grouping 或 aggregating 操作。

In Scala, these operations are automatically available on RDDs containing Tuple2 objects (the built-in tuples in the language, created by simply writing (a, b)). The key-value pair operations are available in the PairRDDFunctions class, which automatically wraps around an RDD of tuples.

在scala中,这些操作都是自动可用的scala包含了tuple2 RDDS(内置对象的元组的语言,由简单的写作(A,B)),键值对的操作都定义在了PairRDDFunctions类中,该类将对元组RDD的功能进行增强。

For example, the following code uses the reduceByKey operation on key-value pairs to count how many times each line of text occurs in a file:

例如,下面的代码使用的 Key-Value 对的 reduceByKey 操作统计文本文件中每一行出现了多少次:

val lines = sc.textFile("data.txt")
val pairs = lines.map(s => (s, 1))
val counts = pairs.reduceByKey((a, b) => a + b)

We could also use counts.sortByKey(), for example, to sort the pairs alphabetically, and finally counts.collect() to bring them back to the driver program as an array of objects.

我们也可以使用counts.sortByKey(),例如,对其进行按字母排序,最后使用counts.collect()方法收集结果数据返回到驱动程序

Note: when using custom objects as the key in key-value pair operations, you must be sure that a custom equals() method is accompanied with a matching hashCode() method. For full details, see the contract outlined in the Object.hashCode() documentation.

注意:当你使用键值对RDD操作一个自定义的对象时,如果你重写了equals()方法也必须重写hashCode()方法。有关详情, 请参阅 Object.hashCode() documentation 中列出的约定.

Transformations

The following table lists some of the common transformations supported by Spark. Refer to the RDD API doc (Scala, Java, Python, R) and pair RDD functions doc (Scala, Java) for details.

下表列出了一些 Spark 常用的 transformations(转换). 详情请参考 RDD API 文档 (Scala, Java, Python, R) 和 pair RDD 函数文档 (Scala, Java).

Transformation(转换)Meaning(说明)
map(func)将函数func应用于RDD中的每个元素,并将返回值生成一个新的RDD
filter(func)将函数func应用于RDD中的每个元素,并将返回值为true的元素生成一个新的RDD
flatMap(func)与map类似,但每个输入项都可以映射到0个或多个输出项(因此函数应该返回一个序列而不是单个项)
mapPartitions(func)与 map 类似,但是单独的运行在在每个 RDD 的 partition(分区,block)上,所以在一个类型为 T 的 RDD 上运行时 func 必须是 Iterator => Iterator 类型
mapPartitionsWithIndex(func)与 mapPartitions 类似,但是也需要提供一个代表 partition 的 index(索引)的 interger value(整型值)作为参数的 func,所以在一个类型为 T 的 RDD 上运行时 func 必须是 (Int, Iterator) => Iterator 类型
sample(withReplacement, fraction, seed)样本数据,设置是否放回(withReplacement), 采样的百分比(fraction)、使用指定的随机数生成器的种子(seed)
union(otherDataset)反回一个新的 dataset,它包含了 source dataset(源数据集)和 otherDataset(其它数据集)的并集
intersection(otherDataset)返回一个新的 RDD,它包含了 source dataset(源数据集)和 otherDataset(其它数据集)的交集
distinct([numTasks]))对数据集中的元素进行去重并返回一个新的数据集
groupByKey([numTasks])在一个 (K, V) pair 的 dataset 上调用时,返回一个 (K, Iterable) . Note: 如果分组是为了在每一个 key 上执行聚合操作(例如,sum 或 average),此时使用 reduceByKey 或 aggregateByKey 来计算性能会更好. Note: 默认情况下,并行度取决于父 RDD 的分区数。可以传递一个可选的 numTasks 参数来设置不同的任务数
reduceByKey(func, [numTasks])当调用这个方法时,会对相同的键执行func聚合操作并重新生成一个键值对RDD
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])在 (K, V) pairs 的 dataset 上调用时, 返回 (K, U) pairs 的 dataset,其中的 values 是针对每个 key 使用给定的 combine 函数以及一个 neutral “0” 值来进行聚合的. 允许聚合值的类型与输入值的类型不一样, 同时避免不必要的配置. 像 groupByKey 一样, reduce tasks 的数量是可以通过第二个可选的参数来配置的
sortByKey([ascending], [numTasks])在一个 (K, V) pair 的 dataset 上调用时,其中的 K 实现了 Ordered,返回一个按 keys 升序或降序的 (K, V) pairs 的 dataset, 由 boolean 类型的 ascending 参数来指定
join(otherDataset, [numTasks])在一个 (K, V) 和 (K, W) 类型的 dataset 上调用时,返回一个 (K, (V, W)) pairs 的 dataset,它拥有每个 key 在两个数据集中所有的元素对。Outer joins 可以通过 leftOuterJoin, rightOuterJoin 和 fullOuterJoin 来实现
cogroup(otherDataset, [numTasks])在一个 (K, V) 和的 dataset 上调用时,返回一个 (K, (Iterable, Iterable)) tuples 的 dataset. 这个操作也调用了 groupWith
cartesian(otherDataset)在一个 T 和 U 类型的 dataset 上调用时,返回一个 (T, U) pairs 类型的 dataset(所有元素的 pairs,即笛卡尔积)
pipe(command, [envVars])Pipe each partition of the RDD through a shell command, e.g. a Perl or bash script. RDD elements are written to the process’s stdin and lines output to its stdout are returned as an RDD of strings.
coalesce(numPartitions)Decrease the number of partitions in the RDD to numPartitions. Useful for running operations more efficiently after filtering down a large dataset.
repartition(numPartitions)Reshuffle(重新洗牌)RDD 中的数据以创建或者更多的 partitions(分区)并将每个分区中的数据尽量保持均匀. 该操作总是通过网络来 shuffles 所有的数据
repartitionAndSortWithinPartitions(partitioner)根据给定的 partitioner(分区器)对 RDD 进行重新分区,并在每个结果分区中,按照 key 值对记录排序。这比每一个分区中先调用 repartition 然后再 sorting(排序)效率更高,因为它可以将排序过程推送到 shuffle 操作的机器上进行
Actions

The following table lists some of the common actions supported by Spark. Refer to the RDD API doc (Scala, Java, Python, R)and pair RDD functions doc (Scala, Java) for details.

下表列出了一些 Spark 常用的 actions 操作。详细请参考 RDD API 文档 (Scala, Java, Python, R)和 pair RDD 函数文档 (Scala, Java).

ActionMeaning
reduce(func)使用func(输入两个元素,返回一个元素)函数对Dataset中的元素进行聚合运算。这个函数应该是可交换(commutative )和关联(associative)的,这样才能保证它可以被并行地正确计算
collect()以数组的形式放回Dataset中的所有元素到驱动程序中,这个操作通常用在filter或者其他一些能够返回足够小的数据集的子集之上。
count()返回Dataset元素的总个数
first()返回Dataset的第一个元素(类似take(1))
take(n)以数组的形式返回Dataset中的n个元素
takeSample(withReplacement, num, [seed])以数组的形式随机返回num个Dataset中的元素,不管是否替换,都可以预先指定一个随机数生成器种子。
takeOrdered(n, [ordering])返回Dataset中的n个元素采用自然顺序或自定义的比较器
saveAsTextFile(path)将Dataset中的元素以Text文件形式存入本地文件系统、hdfs或者任何hadopp支持的文件系统。Spark将会将所有的元素转换为字符串作为文件的一行记录
saveAsSequenceFile(path) (Java and Scala)将Dataset中的元素以 Hadoop SequenceFile形式存入本地文件系统、hdfs或者任何hadopp支持的文件系统。该操作可以在实现了 Hadoop 的 Writable 接口的键值对(key-value pairs)的 RDD 上使用。在 Scala 中,它还可以隐式转换为 Writable 的类型(Spark 包括了基本类型的转换,例如 Int, Double, String 等等)
saveAsObjectFile(path) (Java and Scala)使用 Java 序列化(serialization)以简单的格式(simple format)存储数据集的元素,然后可以使用 SparkContext.objectFile() 再次进行加载
countByKey()仅适用于(K,V)类型的 RDD 。返回具有每个 key 的计数的 (K , Int)pairs 的 hashmap
foreach(func)在DataSet的每个元素上运行一个func函数
YOLO11 Backbone改进:二值化、三值化权重实战(一) 本文介绍了二值化/三值化神经网络的基本概念、优势挑战及应用场景。二值化网络将权重限制为±1,三值化则增加0值,显著减少模型存储需求和计算复杂度。虽然存在精度下降等挑战,但通过技术改进已能在移动设备、自动驾驶等领域应用。文章分析了YOLO11中适合量化的层,并详细阐述了二值化权重原理及Straight-Through Estimator等关键技术。二值化/三值化神经网络为资源受限设备提供了高效的深度学习解决方案。 阅读详情

相关推荐

OCTA-500:用于光学相干断层扫描血管造影研究的视网膜数据集|文献速递-基于生成模型的数据增强与疾病监测应用

数据集提供了丰富的图像和注释,包括两种模态(OCT/OCTA体积)、六种投影类型、四种文本标签(年龄/性别/眼别/疾病)以及七种分割标签(大血管/毛细血管/动脉/静脉/2D FAZ/3D FAZ/视网膜层)。我们介绍了新的 OCTA-500 数据集,该数据集包含来自 500 名受试者的 OCTA 成像,并提供了丰富的图像和标注集。(C) OCTA-500 切片的人工标注示例。图 4. OCTA-500 数据集中文本标签的统计直方图:(a) 性别,(b) 眼别,(c) 年龄,(d) 疾病。

weixin_38594676的博客 1434

Spark RDDs 编程

RDD是 resilient distributed dataset,RDD可以看做是一个分布式元素集合。在Spark中,所有的操作都是基于RDD开始,例如创建RDD,改变RDD或者在RDD上面调用操作来计算。RDD基础RDD在spark里面是一个不可变(immutable)的分布式对象集合。每个RDD被分成了多个partitions,每个partition可以在某个集群的节点中计算。RDD可以包含

zhexiao 699

使用PlotNeuralNet绘制深度学习网络图的基本操作

使用PlotNeuralNet绘制深度学习网络图的基本操作

weixin_46877907的博客 2110

spark streaming programming guide 基础概念之对DStream的transform(三e)

原文网站: http://spark.apache.org/docs/latest/streaming-programming-guide.html 本篇译文链接: http://spark.apache.org/docs/latest/streaming-programming-guide.html#transformations-on-dstreams   和RDD类似,对于DStr...

newchitu的博客 258

彻底解决Win11 Android模拟器驱动权限问题:手动修改silent_install.bat的保姆级教程

本文提供了一份详细的Win11 Android模拟器驱动权限问题解决方案,重点介绍了手动修改silent_install.bat脚本的两种方法。通过分析问题根源并给出具体代码修改方案,帮助开发者彻底解决Android Studio在Windows 11上安装时遇到的UAC循环弹窗问题,确保android-emulator-hypervisor-driver顺利安装。

dengliugong3918的博客 460

Zemax实战:手把手教你设计一个40倍、NA0.65的显微物镜(附初始结构文件)

本文详细介绍了使用Zemax设计40倍、NA0.65显微物镜的完整流程,从初始结构搭建到优化验证,涵盖光学设计的关键技巧和实战经验。通过分阶段优化策略和公差分析,帮助工程师快速掌握高倍显微物镜的设计方法,提升光学系统性能。

weixin_42525369的博客 338

Spark Programming Guide (Python) Spark编程指南 (三)

原始版本参见:http://cholerae.com/2015/04/11/-%E7%BF%BB%E8%AF%91-Spark%E7%BC%96%E7%A8%8B%E6%8C%87%E5%8D%97-Python%E7%89%88/ 对部分内容有修改,恕本人水平有限,如有错误,在所难免。 1.  打印出RDD中的元素 a)  一个常见做法是试图通过如下语句打印出RDD中每一个元素

ColdCode's Hello World~ 969

EMI硬件抑制八项工程对策:从回路面积到谐振规避

电磁干扰(EMI)是电子系统可靠性与EMC合规性的核心挑战,其本质源于高频电流回路产生的辐射与耦合效应。理解回路面积、共模/差模噪声、阻抗匹配等基础原理,是实施有效抑制的前提。技术价值体现在降低辐射发射(RE)、传导发射(CE)超标风险,提升产品一次通过率与长期稳定性。典型应用场景包括开关电源设计、高速数字接口布局、工业嵌入式设备及医疗电子等对EMC要求严苛的领域。本文聚焦可落地的硬件级对策,涵盖回路面积控制、屏蔽策略、变压器漏磁管理、双线传输与阻抗匹配等关键实践,深度融合电流回路物理模型与PCB工程实现。

weixin_35019679的博客 84

spark streaming programming guide 基础概念之linking(三a)

原文网站: http://spark.apache.org/docs/latest/streaming-programming-guide.html 本篇译文链接: http://spark.apache.org/docs/latest/streaming-programming-guide.html#linking 和spark类似,通过maven可以管理我们的spark

newchitu的博客 298

西门子 G120 变频器报文

G120报文

mmxxoo_xxmmp的博客 8064

wireshark提取视频数据之RTP包中提取H264和H265

本文主要描述从wireshark包数据中提取出H264和H265裸流数据方法,裸流通过RTP封包方式发送,从抓包中直接提取视频流数据,进而进行流媒体问题定位

技术控的笔记 17万+

spark streaming programming guide 基础概念之初始化StreamingContext(三b)

原文网站: http://spark.apache.org/docs/latest/streaming-programming-guide.html 本篇译文链接: http://spark.apache.org/docs/latest/streaming-programming-guide.html#initializing-streamingcontext

newchitu的博客 485

Altium Designer(AD24/25)如何在PCB设计阶段做阻抗匹配

目前阻抗匹配多直接有制版厂进行,PCB设计师在设计阶段可不关注阻抗设计,在加工阶段只需标注需要控制的阻抗线,制板厂即可按照要求对阻抗线进行调整和控制。但是对于设计师来讲掌握阻抗线的设计方法也是非常必要的。本文介绍Altium Designer(AD24/25)如何在PCB设计阶段做阻抗匹配。

fydar的博客 889

RDD编程指引(三)(部分翻译Spark官网文章RDD Programming Guide)

本人刚开始入门学习Spark,打算先将Spark文档看一遍,顺便做点笔记,就进行一些翻译和记录。由于本人只会python,所以翻译都是以python部分代码进行。以下并非完全100%官网翻译,更多是个人理解+笔记+部分个人认为重要的内容的翻译,新手作品,请各位大神多多指正。 官网原文链接:http://spark.apache.org/docs/latest/rdd-programming-g...

alendx的博客 280

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

spark streaming programming guide 基础概念之初始化Discretized Streams(DStream)(三c)

原文网站: http://spark.apache.org/docs/latest/streaming-programming-guide.html 本篇译文链接: http://spark.apache.org/docs/latest/streaming-programming-guide.html#discretized-streams-dstreams

newchitu的博客 483

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

spark streaming programming guide 基础概念之输入离散流和接收方(三d)

原文网站: http://spark.apache.org/docs/latest/streaming-programming-guide.html 本篇译文链接: http://spark.apache.org/docs/latest/streaming-programming-guide.html#input-dstreams-and-receivers

newchitu的博客 453

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Spark】【翻译】RDD Programming Guide

Spark官方文档翻译系列,RDD编程指南(RDD Programming Guide)

petrel2015的博客 1354

Spark1.1.0 Spark SQL Programming Guide

Spark SQL Programming Guide OverviewGetting StartedData Sources RDDs Inferring the Schema Using ReflectionProgrammatically Specifying the Schema Parquet Files Loading Data Programmaticall

luyee2010的专栏 7249

Spark Programming Guide

目录一、Spark Programming Guide1.Overview2.Linking with Spark连接3.Initializing SparkUsing the Shell4.Resilient Distributed Datasets (RDDs)弹性分布式数据集Parallelized CollectionsExternal Datasets(外部数据集)RDD Operati...

leaeason的博客 341

Spark Streaming Programming Guide

简述 Spark Streaming 是核心 Spark API 的扩展,支持可伸缩、高吞吐量、容错的实时数据流处理。数据可以从许多来源获取,如Kafka、Flume、Kinesis 或 TCP sockets,可以使用复杂的算法处理数据,这些算法用高级函数表示,如 map、reduce、join和window。最后,处理后的数据可以推送到文件系统、数据库和活动仪表板。实际上,您可以将 Spar...

主要写大数据集群一线运维和学习工作经验 416

Spark1.1.0 Spark Programming Guide

Spark Programming Guide OverviewLinking with SparkInitializing Spark Using the Shell Resilient Distributed Datasets (RDDs) Parallelized CollectionsExternal DatasetsRDD Operations BasicsPa

luyee2010的专栏 5326

Spark GraphX Programming Guide 编程指南

6、 Spark GraphX Programming Guide 6.1 概述 GraphX是spark的一个新组件用于图和并行图计算。在一个高水平,GraphX通过引进一个新的图抽象扩展了spark RDD:带有顶点和边属性的有向多重图。为了支持图计算,GraphX 提供了很多基本的操作(像 subgraph, joinVertices, and aggregateMessages

Spark MLlib 机器学习 3492

Spark1.1.0 Spark Streaming Programming Guide

Spark Streaming Programming Guide OverviewA Quick ExampleBasic Concepts LinkingInitializing StreamingContextDiscretized Streams (DStreams)Input DStreamsTransformations on DStreamsOutput Operatio

luyee2010的专栏 7511

Spark-RDD Programming Guide

RDD Programming Guide Overview Linking with Spark Initializing Spark Using the Shell Resilient Distributed Datasets (RDDs) Parallelized Collections External Datasets RDD Operations Basics Passing Functions to Spark Understanding closure

cxu123321的博客 359
上一篇: Spark Programming Guide(二)
下一篇: Spark Programming Guide(四)
coley-wu
博客等级 码龄12年 859粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值