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是针对每个具有相同键的值的操作,依次操作。