首页 > 其他分享 >PySpark学习笔记2-RDD算子,RDD持久化

PySpark学习笔记2-RDD算子,RDD持久化

时间:2025-01-06 18:31:07浏览次数:3  
标签:rdd 分区 PySpark RDD 算子 sc 数据

RDD定义
RDD是弹性分布式数据集,是spark中的最基本的数据抽象,里面的元素可以并行计算
RDD的五大特性
RDD是有分区的,它的分区是数据存储的最小单位
RDD的方法会作用在所有分区上
RDD之间是有依赖关系的
KV型的RDD可以有分区器
RDD的分区会尽量靠近数据所在的服务器,尽量保证本地读取

from pyspark import SparkContext,SparkConf
conf = Sparkconf().setAppName('Wordcount').setMaster('local[*]')
sc = SparkContext(conf = conf)
rdd1 = sc.textFile("./test.txt")
rdd2 = rdd1.flatMap(lambda x:x.split(' '))
rdd3 = rdd2.map(lambda x: (x,1))
rdd4 = rdd3.reduceBykey(lambda a,b : a+b)
print(rdd4.collect())
#pyspark实现word count

将本地集合转化成分布式RDD

from pyspark import SparkContext,SparkConf
conf = Sparkconf().setAppName('Wordcount').setMaster('local[*]')
sc = SparkContext(conf = conf)
# 本地数据
data = [1,2,3,4,5,6]
rdd = sc.parallesize(data, numSlices=3)
# 转化成RDD数据,并且分了三个区

读取RDD分区数
读取文件

rdd = sc.textFile('../data/words.txt',1000)
# 限制读取的最大分区数为1000
rdd.getNumPartitions()

# 适用于读取小文件
rdd = sc.wholeTextFiles('../data/tiny_file/',1000)

RDD算子
分布式集合对象上的API成为算子
对应本地对象的API即为方法、函数
其中RDD算子分为两类:transformation转换算子和action动作算子
其中转换算子的返回值仍是RDD,返回值不是RDD的即为动作算子
在上面的代码片中,textfile,flatmap,mao,reducebykey均为转换算子,collect为动作算子
常用转换算子
rdd.map()将数据按照处理函数一条条处理并返回新的RDD
这个函数通常是lambda x:f(x)的形式

rdd.flatMap()执行map操作,然后接触嵌套

rdd.reduceByKey()实现自动按照key分组,然后按照提供的聚合逻辑实现组内数据的聚合操作

rdd.groupNy()

#对数字按照偶数奇数分组
rdd = sc.parallesize([1,2,3,4,5])
rdd2 = rdd.groupBy(lambda num: 'even' if (num%2==0) else 'odd')
#分组完成后每个组是一个二元元组
rdd3 = rdd2.map(lambda(x : (x[0],list(x[1]))))
print(rdd3.collect())

rdd.filter() 根据函数过滤想要的数据进行保留

rdd.distinct()对RDD数据进行去重,并返回新的RDD

rdd.union()合并两个RDD并返回一个RDD,只合并不去重,并且两个RDD的类型可以不同

rdd.join()实现内连接
rdd.leftOuterJoin()左外连接
rdd.rightOuterJoin()右外连接

rdd.intersection()返回两个RDD的交集

rdd.glom()按照数据分区进行嵌套并返回新的RDD

rdd.groupByKey()按照键值进行分组,返回一个二元元组
rdd.sortBy()
按照函数进行排序,ascending确定升序还是降序
numpartitions确定按照多少分区进行排序
rdd.sortByKey()按照键值进行排序,ascending确定升序和降序,numPartition确定分区大小,keyfunc确定排序之前最键值的处理方法
常用动作算子
rdd.countByKey()统计键值出现的次数
rdd.collect()将各个分区的数据统一收集到driver中,形成一个list对象,结果数据集不能过大,否则会造成内存爆炸
rdd.reduce(func)按照传入的函数逻辑进行聚合
rdd.fold(default value,func) 按照逻辑使用初始值进行聚合操作
rdd.first()取出第一个元素
rdd.take(n)取出前n个元素转化成list返回
rdd.top()取出降序排序的前n个元素
rdd.count()取出RDD中的数据条数,是一个数字返回值
rdd.takeSample()随机抽样数据
rdd.takeOrdered()排序后取前n个数据
rdd.foreach()按照逻辑对每一个元素执行指定操作,但是没有返回值
rdd.saveAsTextFile()将RDD数据写入到文本文件中,支持写出到本地或者hdfs文件系统中
foreach和saveAsTextFile()是由分区直接执行的,不经过driver,其余action算子均会经过driver
分区操作算子
rdd.mapPartitions()传递整个分区的数据
rdd.foreachPartition()一次处理一整个分区的数据
rdd.partitionBy()按照新的分区对原数据按照逻辑进行处理
rdd.repartition()按照分区执行重新分区
rdd.coalesce()对分区进行数量增减,通过第二个参数确定是否,比上一个算子更有安全性
rdd.mapValues()对与二元元组RDD进行操作,对其value值进行map操作
rdd.join()实现内连接
rdd.leftOuterJoin()左外连接
rdd.rightOuterJoin()右外连接
面试题
groupbykey和reducebykey的区别
前者只有分组功能,但是后者除了分组功能还有聚合功能,后者在分区内会进行预聚合,在进行分组流程,被分组的数据量大大减少,提高了整体性能
RDD持久化
RDD数据是过程数据,当新数据生成时,旧数据消失
因此RDD提供缓存技术,避免多次重复运算,
rdd.persist(StorageLevel.MEMORY_AND_DISK)
缓存是有可能丢失的

RDD check point也是将数据保存起来,但是只支持硬盘存储,它被设计认为是安全的,但是不保留血缘关系
在这里插入图片描述

标签:rdd,分区,PySpark,RDD,算子,sc,数据
From: https://blog.csdn.net/little_TianYe/article/details/144963052

相关文章

  • HALCON Operator Reference(HALCON 算子参考资料,含pdf文件)
    (链接附文末) 在halcon程序中打开算子帮助窗口,可以看到该算子所属的模块,例如我想看关于fill_up_shape这个算子的说明:HALCON24.11.1.0/HALCONOperatorReference/Regions/Transformations 就可以在pdf的目录跳转到fill_up_shape这个算子的说明页,作用大概就是更好翻......
  • 第五章 共轭空间和共轭算子
    第五章共轭空间和共轭算子......
  • 第四章 有界线性算子
    第四章有界线性算子......
  • 动词算子式通用代码生成器阵列全线彻底开源
    动词算子式通用代码生成器阵列全线彻底开源动词算子式通用代码生成器阵列已全线彻底开源,最后两个组件的源码请见:曲速引擎前端代码生成器:https://gitee.com/jerryshensjf/WarpEngine表反射引擎ReflectTable: https://gitee.com/jerryshensjf/ReflectTable 这两个组件是通......
  • 算子级血缘对数据资产和数据质量管理的价值所在
    算子级血缘,即算子级血缘解析技术,是由国内DataFabric架构理念实践者与引领者Aloudata大应科技自研的继表级血缘、列级血缘之后的第三代数据血缘解析技术。Aloudata也是全球首家研发和掌握该技术的公司。从技术层面深入剖析,算子级血缘技术通过深入解析数据处理逻辑,实现了......
  • 计算机毕业设计PySpark+PyFlink+Hive地震预测系统 地震数据分析可视化 地震爬虫 大数
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • Yolo11改进策略:卷积篇|DSConv,高效卷积算子|附代码|即插即用
    摘要论文介绍研究背景:神经网络量化是提升速度和降低内存使用量的常用方法,但无标记数据的量化问题受到的关注较少。研究目的:引入DSConv卷积算子,旨在生成更小且推理速度更快的神经网络,同时保持高精度。实验验证:在最流行的神经网络架构(ResNet、DenseNet、GoogLeNet、AlexNet......
  • Halcon中watersheds(Operator)算子原理及应用详解
    在Halcon中,watersheds算子是一种基于灰度值的拓扑关系进行图像分割的方法。该算子的原型为watersheds(Image:Basins,Watersheds::),其中Image为输入的图像,Basins为分割后得到的盆地区域,Watersheds为分割的边界线。以下是对watersheds(SmoothedByte,Basins,Watershed......
  • 转载:【AI系统】算子开发编程语言 Ascend C
    本文将深入探讨昇腾算子开发编程语言AscendC,这是一种专为昇腾AI处理器算子开发设计的编程语言,它原生支持C和C++标准规范,最大化匹配用户的开发习惯。AscendC通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力AI开发者低成本完成算子开发和模......
  • 转载:【AI系统】CANN 算子类型
    算子是编程和数学中的重要概念,它们是用于执行特定操作的符号或函数,以便处理输入值并生成输出值。本文将会介绍CANN算子类型及其在AI编程和神经网络中的应用,以及华为CANN算子在AICPU的详细架构和开发要求。算子基本介绍一元算子通过对单个操作数进行操作,如取反或递增,而......