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)]