Spark常用算子讲解二

groupByKey

groupByKey([numTasks])是数据分组操作,在一个由(K, V)键值对组成的数据集上调用,返回一个(K, Seq[V])对的数据集。
注意,如果要对每个键执行聚合(比如求和或平均值),使用reduceByKey或aggregateByKey将提供更好的性``能。

>>> rdd = sc.parallelize([("a", 1), ("b", 1), ("a", 1)]) 
>>> sorted(rdd.groupByKey().mapValues(len).collect()) [('a', 2), ('b', 1)] 
>>> sorted(rdd.groupByKey().mapValues(list).collect()) [('a', [1, 1]), ('b', [1])] 

subtract

subtract相当于进行集合的差操作,RDD 1去除RDD 1和RDD 2交集中的所有元素

>>> x = sc.parallelize([("a", 1), ("b", 4), ("b", 5), ("a", 3)])
 >>> y = sc.parallelize([("a", 3), ("c", None)]) 
 >>> sorted(x.subtract(y).collect()) [('a', 1), ('b', 4), ('b', 5)] 

foreach

foreach 对 RDD 中的每个元素都应用 f 函数操作,不返回 RDD 和 Array, 而是返回Uint。表示 foreach 算子通过用户自定义函数对每个数据项进行操作

>>> def f(x): print(x)
... 
>>> sc.parallelize([1, 2, 3, 4, 5]).foreach(f)

max, min, sum, count

>>> x = sc.parallelize(range(10)) 
>>>> x.collect() 
>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>>> print '最大值:{}'.format(x.max()) 
>最大值:9 
>>>> print '最小值:{}'.format(x.min()) 
>最小值:0 
>>>> print '总和:{}'.format(x.sum()) 
>总和:45 
>>>> print '总个数:{}'.format(x.count()) 
>总个数:10 

mean, variance, sampleVariance, stdev, sampleStdev

>>> x.collect() [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>>> print '平均值:{}'.format(x.mean()) 
>平均值:4.5 
>>>> print '方差:{}'.format(x.variance()) 
>方差:8.25 
>>>> print '样本方差:{}'.format(x.sampleVariance()) 
>样本方差:9.16666666667 
>>>> print '总体标准偏差:{}'.format(x.stdev()) 
>总体标准偏差:2.87228132327 
>>>> print '样本标准偏差:{}'.format(x.sampleStdev()) 
>样本标准偏差:3.0276503541 



countByKey, countByValue

countByKey
与count类似,但是是以key为单位进行统计。
注意:此函数返回的是一个map,不是int。

countByValue
统计一个RDD中各个value的出现次数。返回一个map,map的key是元素的值,value是出现的次数。

first, top, take, takeOrdered



>>> rdd = sc.parallelize([10, 4, 2, 12, 3])
>>>> rdd.first()
> 10 
> >>> rdd.top(1) 
> [12] 
> >>> rdd.top(2) 
> [12, 10] 
> >>> rdd.top(2,key=str) 
> [4, 3]
>  >>> rdd.take(3)
>   [10, 4, 2] 

mapValues

mapValues :针对(Key, Value)型数据中的 Value 进行 Map 操作,而不对 Key 进行处理。

>>> from operator import add
>>> sc.parallelize([1, 2, 3, 4, 5]).reduce(add)
15

reduceByKey

>>> rdd = sc.parallelize([("a", 1), ("b", 1), ("a", 1)])
>>> sorted(rdd.reduceByKey(add).collect())
[('a', 2), ('b', 1)] 


猜你喜欢

转载自blog.csdn.net/qq_43688472/article/details/85644806