Spark_4:Spark常见操作函数
以{1, 2, 3, 3}的RDD为例:
函数名 |
目的 |
示例 |
结果 |
---|---|---|---|
|
将函数应用于 RDD 中的每个元素,将返回值构成新的 RDD |
|
|
|
将函数应用于 RDD 中的每个元素,将返回的迭代器的所有内容构成新的 RDD。通常用来切分单词 |
|
|
|
返回一个由通过传给 |
|
|
|
去重 |
|
|
|
对 RDD 采样,以及是否替换 |
|
非确定的 |
表3-3:对数据分别为{1, 2, 3}和{3, 4, 5}的RDD进行针对两个RDD的转化操作
函数名 |
目的 |
示例 |
结果 |
---|---|---|---|
|
生成一个包含两个 RDD 中所有元素的 RDD |
|
|
|
求两个 RDD 共同的元素的 RDD |
|
|
|
移除一个 RDD 中的内容(例如移除训练数据) |
|
|
|
与另一个 RDD 的笛卡儿积 |
|
|
表3-4:对一个数据为{1, 2, 3, 3}的RDD进行基本的RDD行动操作
函数名 |
目的 |
示例 |
结果 |
---|---|---|---|
|
返回 RDD 中的所有元素 |
|
|
|
RDD 中的元素个数 |
|
|
|
各元素在 RDD 中出现的次数 |
|
|
|
从 RDD 中返回 |
|
|
|
从 RDD 中 返回最前面的 |
|
|
|
从 RDD 中按照提供的顺序返回最前面的 |
|
|
|
从 RDD 中返回任意一些元素 |
|
非确定的 |
|
并行整合 RDD 中 所有数据(例如 |
|
|
|
和 |
|
|
|
和 |
rdd.aggregate((0, 0))
|
|
|
对 RDD 中的每个元素使用给定的函数 |
|
无 |
1、rdd.repartition():对RDD重新分区
2、map() 和 flatMap():
map(): 将函数应用于 RDD 中的每个元素,将返回值构成新的 RDD.
flatMap():将函数应用于 RDD 中的每个元素,将返回的迭代器的所有内容构成新的 RDD。通常用来切分单词
3、distinct():RDD去重
4、reduceByKey(add):只针对key重复的二元组元素。接收一个函数,将重复key的value按函数聚合
from __future__ import print_function from pyspark import SparkContext from pyspark import SparkConf conf = SparkConf().setMaster("local").setAppName("chapter4") sc = SparkContext(conf=conf) num = sc.parallelize([1, 4, 2, 3, 4, 4, 2, 4]) pairs = num.map(lambda x: (x, 1)) # 针对每个数进行计数1的操作, print(pairs.collect()) #输出为列表,每个列表中都是一个二元组,key为每个数,value都为1 a = pairs.reduceByKey(lambda x, y: x+y+1) # b = pairs.reduceByKey(lambda x, y: x+y+2) c = pairs.reduceByKey(lambda x, y: x+y+3) print(a.collect()) print(b.collect()) print(c.collect())
# 输出
[(1, 1), (2, 3), (3, 1), (4, 7)]
[(1, 1), (2, 4), (3, 1), (4, 10)]
[(1, 1), (2, 5), (3, 1), (4, 13)]
# 解释:
reduceByKey的函数是针对具有相同键的二元组。在这里例子中,key=1 和key=3都分别只有一个value =1,即他们的键只有1个,所以他们并不执行匿名函数lambda,所以输出都是(1,1)(3,1)。
而key=2的二元组对应了两个(2,1)(2,1),value1=1,value2=1,key=4的二元组有4个:(4,1)(4,1)(4,1)(4,1),value1=1,value2=1,value3=1,value4=1。这两个key就会执行lambda函数。
对于a来说,执行x+y+1,这个语句怎么理解呢? --》 对于每个相同的key,其value相加并加1,那么key=2: 就有value1+value2+1 = 1+1+1=3。key=4: 就有value1+value2+1 +value3+1+value4+1= 1+1+1+1+1+1+1=7;
对于b来说,执行x+y+2 --》 对于每个相同的key,其value相加并加2,那么key=2: 就有value1+value2+2 = 1+1+2=5。key=4: 就有value1+value2+2 +value3+2+value4+2= 1+1+2+1+2+1+2=10;
对于c来说,执行x+y+3 --》 对于每个相同的key,其value相加并加3,那么key=2: 就有value1+value2+1 = 1+1+1=3。key=4: 就有value1+value2+3+value3+3+value4+3= 1+1+3+1+3+1+3=13;
综上 reduceByKey是针对每个具有相同键的值的操作,依次操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App