Spark学习之键值对(pair RDD)操作(3)

简介: Spark学习之键值对(pair RDD)操作(3)1. 我们通常从一个RDD中提取某些字段(如代表事件时间、用户ID或者其他标识符的字段),并使用这些字段为pair RDD操作中的键。2. 创建pair RDD1)读取本身就是键值对的数据2)一个普通的RDD通过map()转为pair RDD,传递的函数需要返回键值对。Python中使用第一个单词作为

Spark学习之键值对(pair RDD)操作(3)

1. 我们通常从一个RDD中提取某些字段(如代表事件时间、用户ID或者其他标识符的字段),并使用这些字段为pair RDD操作中的键。

2. 创建pair RDD

1)读取本身就是键值对的数据
2)一个普通的RDD通过map()转为pair RDD,传递的函数需要返回键值对。
Python中使用第一个单词作为键创建出一个pair RDD
    pairs = lines.amp(lambda x: (x.split(" ")[0],x))
Scala中使用第一个单词作为键创建出一个pair RDD
    val pairs = lines.map(x=>(x.split(" ")(0),x))

3. pair RDD的转化操作

pair RDD可以使用所有标准RDD上的可能的转化操作,还有其他如下

reduceBykey(func)       合并具有相同键的值

groupByke()             对具有相同键的值进行分组

combineByKey(           使用不同的的返回类型合并具有相同键的值
createCombiner,
mergeValue,
mergCombiners,
partitioner)

mapValues(func)         对pair RDD中的每个值应用一个函数而不改变键

flatMapValues(func)     对pair RDD中的每个值应用一个返回迭代器的函数,
                        然后对返回的每个元素都生成一个对应原键的键值对记录。
                        通常用于符号化。

keys()                  返回一个仅包含键的RDD

values()                返回一个仅包含值的RDD

sortByKey()             返回一个根据键排序的RDD

4. 针对两个pair RDD转化操作

subtractByKey           删掉RDD中键与other RDD中的键相同的元素
join                    对两个RDD进行内连接
rightOuterJoin          对两个RDD进行连接操作,确保第一个RDD的键必须存在(右外连接)
leftOuterJoin           对两个RDD进行连接操作,确保第二个RDD的键必须存在(左外连接)
cogroup                 将两个RDD中拥有相同键的数据分组到一起

5. pair RDD的行动操作

countByKey()            对每个键对应的元素分别计数
collectAsMap()          将结果以映射表的形式返回,以便查询
lookup(key)             返回给定键对应的所有值

6. 数据分区

控制数据分布以获得最少的网络传输可以极大地提升整体性能。
只有当数据集多次在诸如连这种基于键的操作中使用时,分区才有帮助。

Scala自定义分区方式
    val sc = new SparkContext(...)
    val userData = sc.sequenceFile(UserID,UserInfo)("hdfs://...")
                     .partitionBy(new HashPartitioner(100))
                     .persist()
目录
相关文章
|
分布式计算 Kubernetes 调度
Kubeflow-Spark-Operator-架构学习指南
本指南系统解析 Spark Operator 架构,涵盖 Kubebuilder 开发、控制器设计与云原生集成。通过四阶段学习路径,助你从部署到贡献,掌握 Kubernetes Operator 核心原理与实战技能。
694 0
|
存储 分布式计算 并行计算
【赵渝强老师】Spark中的RDD
RDD(弹性分布式数据集)是Spark的核心数据模型,支持分布式并行计算。RDD由分区组成,每个分区由Spark Worker节点处理,具备自动容错、位置感知调度和缓存机制等特性。通过创建RDD,可以指定分区数量,并实现计算函数、依赖关系、分区器和优先位置列表等功能。视频讲解和示例代码进一步详细介绍了RDD的组成和特性。
773 0
|
机器学习/深度学习 人工智能 自然语言处理
3 秒音频也能克隆?拆解 Spark-TTS 架构的极致小样本学习
本文深入解析了 Spark-TTS 模型的架构与原理,该模型仅需 3 秒语音样本即可实现高质量的零样本语音克隆。其核心创新在于 BiCodec 单流语音编码架构,将语音信号分解为语义 Token 和全局 Token,实现内容与音色解耦。结合大型语言模型(如 Qwen 2.5),Spark-TTS 能直接生成语义 Token 并还原波形,简化推理流程。实验表明,它不仅能克隆音色、语速和语调,还支持跨语言朗读及情感调整。尽管面临相似度提升、样本鲁棒性等挑战,但其技术突破为定制化 AI 声音提供了全新可能。
1229 35
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
556 0
|
分布式计算 Spark
【赵渝强老师】Spark RDD的依赖关系和任务阶段
Spark RDD之间的依赖关系分为窄依赖和宽依赖。窄依赖指父RDD的每个分区最多被一个子RDD分区使用,如map、filter操作;宽依赖则指父RDD的每个分区被多个子RDD分区使用,如分组和某些join操作。窄依赖任务可在同一阶段完成,而宽依赖因Shuffle的存在需划分不同阶段执行。借助Spark Web Console可查看任务的DAG图及阶段划分。
929 15
|
存储 缓存 分布式计算
【赵渝强老师】Spark RDD的缓存机制
Spark RDD通过`persist`或`cache`方法可将计算结果缓存,但并非立即生效,而是在触发action时才缓存到内存中供重用。`cache`方法实际调用了`persist(StorageLevel.MEMORY_ONLY)`。RDD缓存可能因内存不足被删除,建议结合检查点机制保证容错。示例中,读取大文件并多次调用`count`,使用缓存后执行效率显著提升,最后一次计算仅耗时98ms。
546 0
【赵渝强老师】Spark RDD的缓存机制
|
分布式计算 算法 Spark
spark学习之 GraphX—预测社交圈子
spark学习之 GraphX—预测社交圈子
578 0
|
分布式计算 Scala Spark
educoder的spark算子学习
educoder的spark算子学习
376 0
|
消息中间件 分布式计算 Kafka
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
413 0
|
SQL 分布式计算 大数据
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
570 0