spark--actions算子--reduce

本文演示了如何使用Apache Spark的reduce操作来聚合数据集元素。通过一个简单的整数列表示例,展示了reduce函数如何将数据集中的所有元素累加起来。
import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by liupeng on 2017/6/16.
  */
object A_reduce {
  System.setProperty("hadoop.home.dir","F:\\hadoop-2.6.5")

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("reduce_test").setMaster("local")
    val sc = new SparkContext(conf)
    //准备一下数据,有一个集合,通过reduce来进行累加
    val list = List(1, 2, 3, 4, 5)
    val rdd = sc.parallelize(list)

    //reduce它需要两个参数并返回一个,来聚合数据集的元素。
    val sum = rdd.reduce((x,y) => x + y)
    println(sum)
  }
}
运行结果:
15
### 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条记录或是持久化最终的结果集合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值