PySpark----Action操作

目录

1.aggregate(zeroValue, seqOp, combOp)

2..aggregateByKey(zeroValue, seqFunc, combFunc, numPartitions=None, partitionFunc= )

3.collect方法

4.collectAsMap()

5.count()方法

6.countApprox(timeout, confidence=0.95)

7.countApproxDistinct(relativeSD=0.05)

8..countByKey()

9.countByValue()

10..first()

11.fold(zeroValue, op)

12.foreach(f)

13..foreachPartition(f)

14.getNumPartitions()

15.getStorageLevel()

16.id()

17.isCheckpointed()

18.isEmpty()

19.lookup(key)

20.mean()

21.meanApprox(timeout, confidence=0.95)

22.min(key=None)

23.name()

24.reduce(f)

25.reduceByKeyLocally

26.sampleStdev()

27.sampleVariance()

28..saveAsTextFile

29.saveAsSequenceFile(path, compressionCodecClass=None)

30.stats()

31.stdev()

32.sum()

33..sumApprox(timeout, confidence=0.95)

34.take(num)

35.takeOrdered(num, key=None)

36.takeSample(withReplacement, num, seed=None)

37.toDebugString()

38.toLocalIterator()

39.top(num, key=None)

40.treeAggregate(zeroValue, seqOp, combOp, depth=2)

41.treeReduce(f, depth=2)

42.variance()


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)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值