目录
1.aggregate(zeroValue, seqOp, combOp)
2..aggregateByKey(zeroValue, seqFunc, combFunc, numPartitions=None, partitionFunc= )
6.countApprox(timeout, confidence=0.95)
7.countApproxDistinct(relativeSD=0.05)
21.meanApprox(timeout, confidence=0.95)
29.saveAsSequenceFile(path, compressionCodecClass=None)
33..sumApprox(timeout, confidence=0.95)
36.takeSample(withReplacement, num, seed=None)
40.treeAggregate(zeroValue, seqOp, combOp, depth=2)
1.aggregate(zeroValue, seqOp, combOp)
这属于一个聚合操作, spark先把数据分区,每个分区由任务调度器分发到不同的节点分别计算和,计算的结果返回 driver节点,在driver节点将所有节点的返回值相加,就得到了整个数据集的和了。
zeroValue是每个节点相加的初始值,seqOp为每个节点上调用的运算函数,combOp为节点 返回结果调用的运算函数。
sc = spark.sparkContext
import numpy as np
rdd = sc.parallelize(np.arange(11),3)
rdd.collect()
rdd.aggregate(0,lambda x,y:x+y,lambda x,y:x+y)
rdd.aggregate(8,lambda x,y:x+y,lambda x,y:x+y)
rdd.aggregate(3,lambda x,y:x+y,lambda x,y:x+y)
从结果看到每个分区上调用seqOp函数都要加上zeroValue,最后运行combOp也要加上 zeroValue。3个分区加上最后的combOp所以总共加了四次zeroValue。
2..aggregateByKey(zeroValue, seqFunc, combFunc, numPartitions=None, partitionFunc= )
这个方法用来对相同的key值进行聚合操作,同样的是指定 zeroValue,seqFunc,numPartitoins为分区数,partitionFunc为作用在分区上的函数。
这个方法同aggregate方法名字相似,但是它却是一个transformation方法,不会触发作 业的提交!
datas = [('a',22),('b',33),('c',44),('b',55),('a',66)]
rdd = sc.parallelize(datas,3)
rdd.collect()
rdd.aggregateByKey(0,lambda x,y:x+y,lambda x,y:x+y)
rdd.aggregateByKey(1,lambda x,y:x+y,lambda x,y:x+y,1).collect()
3.collect方法
该放回会触发作业的提交,返回一个结果的列表,注意:若结果集较大,使用collect方法 可能使driver程序崩溃,因为collect方法会返回所有节点的结果数据到driver节点,造成OOM 或其他的异常。
rdd.collect()
4.collectAsMap()
这个方法仍然是action方法,会触发作业的执行,顾名思义该方法返回的结 果是一个字典结构
dd = rdd.collectAsMap()
5.count()方法
统计RDD中元素的个数
rdd.count()
6.countApprox(timeout, confidence=0.95)
带有超时限制的count统计函数,时间一到,即便所有任务还没有完成,该方法也会返回已经完 成的任务的统计结果。
rdd = sc.parallelize(range(1000000), 100)
rdd.countApprox(1000, 1.0)
7.countApproxDistinct(relativeSD=0.05)
返回大概的RDD数据集中没有重复数据的数据条数。
rdd1 = sc.parallelize(range(1000000), 100)
rdd2 = sc.parallelize(np.arange(1,1000001),100)
rdd3 = sc.union([rdd1,rdd2])
rdd3.countApproxDistinct()
rdd3.countApproxDistinct(relativeSD=0.01)
rdd3.countApproxDistinct(relativeSD=0.001)
8..countByKey()
统计相同key的个数,以字典形式返回
datas = [('a',11),('b',22),('b',88),('c