pyspark---RDD

本文深入介绍了Spark中的核心概念——弹性分布式数据集(RDD)。详细解释了RDD的特性,包括其不可变性、可分区性和并行计算能力。同时,文章探讨了RDD的工作原理,如分片、计算函数、依赖关系、分片函数和数据位置的重要性。最后,通过Python示例展示了如何在实际应用中操作RDD。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单介绍

谈到spark大家都可以想到RDD,它是spark必不可少的一部分,在我看来他是spark数据处理的基础之一给大家简单介绍一下吧。

RDD

RDD又叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

(1)一组分片(Partition),即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。

(2)一个计算每个分区的函数。Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。

(3)RDD之间的依赖关系。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。

(4)一个Partitioner,即RDD的分片函数。当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。只有对于于key-value的RDD,才会有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函数不但决定了RDD本身的分片数量,也决定了parent RDD Shuffle输出时的分片数量。

(5)一个列表,存储存取每个Partition的优先位置(preferred location)。对于一个HDFS文件来说,这个列表保存的就是每个Partition所在的块的位置。按照“移动数据不如移动计算”的理念,Spark在进行任务调度的时候,会尽可能地将计算任务分配到其所要处理数据块的存储位置。

基本使用

#pyspark.SparkContext()是spark应用的入口,也可以称为驱动
from pyspark import SparkConf, SparkContext

conf = SparkConf().setAppName("sparkApp").setMaster("local")
sc = SparkContext.getOrCreate(conf)


#parallelize(c,numSlices=None)分发本地Python集合以形成RDD。如果输入表示性能范围,则建议使用xrange。
#glom()通过将每个分区内的所有元素合并到一个列表中返回一个RDD。
rdd1 = sc.parallelize([0,2,3,4,6], 5)
rdd2 = sc.parallelize(range(0, 6, 2), 5)
print(rdd1.collect())
print(rdd1.glom().collect())
print(rdd2.collect())
print(rdd2.glom().collect())


# histogram(buckets)
# 对rdd中的元素进行频数统计,统计区间有两种,一种是给出段数,一种是直接给出区间。返回为元组
rdd = sc.parallelize(range(51))
print(rdd.histogram(2))
print(rdd.histogram([0, 5, 25, 50]))
print(rdd.histogram([0, 15, 30, 45, 60]))
rdd = sc.parallelize(["ab", "ac", "b", "bd", "ef"])
print(rdd.histogram(("a", "b", "c")))

# pipe(command, env=None, checkCode=False)
# 通过管道向后面环节输出command处理过的结果,具体功能就体现在command,command为linux命令。 
# pipe函数中的'cat'为linux命令,表示打印内容。
sc.parallelize(['1', '2', '', '3']).pipe('cat').collect()


# sorted(sc.parallelize([1, 1, 2, 3]).distinct().collect())
# 返回此RDD的采样子集
# withReplacement:是否重复采样
# fraction:样本预期占RDD的大小,每一个元素被取到的概率一样,是一个【0,1】的数
# seed 随机模式的种子
rdd = sc.parallelize(range(100), 4)
print(rdd.sample(False, 0.1, 81).count())
print(rdd.sample(False, 0.2, 81).count())

以上都是一些简单的数据处理的操作,在使用中发现和pandas有点类似,不过个人认为pandas加numpy还是比较如意的,当然spark主要还是基于java开发的,python在spark上感觉更多还是用在一些机器学习上面。

内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值