PySpark----Action操作

本文详细介绍了PySpark中的一系列Action操作,包括aggregate、aggregateByKey、collect、count、mean、reduce等,涵盖了数据聚合、数据收集、统计计算等多个方面,帮助理解如何在PySpark中对数据进行处理和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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)

8..countByKey()

统计相同key的个数,以字典形式返回

datas = [('a',11),('b',22),('b',88),('c
### Spark算子在Python中的使用 #### 创建SparkContext对象 为了使用Spark算子,在Python中首先需要创建`SparkContext`对象。这可以通过导入`pyspark.SparkContext`并初始化来完成[^2]。 ```python from pyspark import SparkConf, SparkContext conf = SparkConf().setMaster("local").setAppName("WordCount") sc = SparkContext(conf=conf) ``` #### 使用RDD操作数据集 一旦有了上下文环境,就可以加载外部的数据源到弹性分布式数据集(Resilient Distributed Dataset, RDD)。下面的例子展示了如何读取文件路径下的文本文件,并将其转换成一个RDD实例: ```python data_path = "D:\\pythonCode\\PySpark\\data\\wordcount\\HTTP_20130313143750.dat" flow = sc.textFile(data_path)[^2] ``` #### 应用Transformation和Action算子 通过调用各种transformation函数可以对原始数据执行不同的变换处理;而action则用于触发实际计算并将结果返回给驱动程序或保存至存储介质。例如统计单词频率的任务可以用如下方式实现: ```python words = flow.flatMap(lambda line: line.split()) # Split lines into words pairs = words.map(lambda word: (word, 1)) # Create pairs of (word, count) counts = pairs.reduceByKey(lambda a, b: a + b) # Sum counts per key output = counts.collect() # Collect results as list at driver side for (word, count) in output: print(f"{word}: {count}") ``` 上述代码片段利用了几个常见的transformations (`flatMap`, `map`) 和 action(`reduceByKey`, `collect`) 来解析输入流、映射元素为键值对形式以及汇总相同key对应的value总和最后收集所有的输出项打印出来[^1]。 #### 常见的Transformations与Actions 除了上面提到的操作外还有许多其他类型的spark算子可供选择,比如filter、union、join等都是常用的transformation类型;foreach、take、saveAsTextFile则是典型的actions用来遍历rdd内容、获取前n条记录或是持久化最终的结果集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值