Spark_RDD作业

这篇博客详细介绍了如何使用pyspark的RDD进行数据分析,包括交互式编程练习,如计算学生总数、课程数量、特定学生平均分、学生选修课程数、课程选修人数及平均分,以及编写独立应用程序实现数据去重和平均值计算。

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

pyspark使用RDD的转换和行动命令进行数据分析

1.pyspark交互式编程练习

查看文件“data01.txt”数据集,该数据集包含了某大学计算机系的成绩,请根据给定的实验数据,在pyspark中通过编程来计算以下内容:

(1) 该系总共有多少学生;

>>> lines = sc.textFile("file:///usr/local/spark/sparksqldata/data01.txt")
>>> res = lines.map(lambda x:x.split(",")).map(lambda x: x[0]) #获取每行数据的第1列
>>> distinct_res = res.distinct()  #去重操作
>>> distinct_res.count() #取元素总个数

答案为:265人

(2) 该系共开设了多少门课程;

>>> lines = sc.textFile("file:///usr/local/spark/sparksqldata/data01.txt")
>>> res = lines.map(lambda x:x.split(",")).map(lambda x:x[1]) #获取每行数据的第2列
>>> distinct_res = res.distinct() #去重操作
>>> distinct_res.count() #取元素总个数

答案为8门

(3) tdu同学的总成绩平均分是多少;

>>> lines = sc.textFile("file:///usr/local/spark/sparksqldata/data01.txt")
>>> res = lines.map(lambda x:x.split(",")).filter(lambda x:x[0]=="tdu") #筛选tdu同学的成绩信息
>>> res.foreach(print)
>>> score 
### Spark RDD 头歌作业实现方式 在 Spark 中,RDD 是一种分布式数据集的核心抽象。通过使用 `spark-shell` 或其他开发环境,用户可以通过多种方法操作 RDD 数据结构并完成各种计算任务。 #### 创建 RDD 并执行基本操作 以下是基于引用中的内容构建的一个简单例子[^2]: ```scala // 建立与 Spark 框架的连接 val conf = new SparkConf().setMaster("local[*]").setAppName("RDDExample") val sc = new SparkContext(conf) // 创建一个简单的 RDD val data = List(1, 2, 3, 4, 5) val rdd = sc.parallelize(data, 2) // 将列表转化为 RDD,并设置分区数为 2 // 执行 glom 转换操作,将每个分区的数据收集到数组中 val result = rdd.glom() // 输出结果 result.collect.foreach { partition => println(partition.mkString(",")) } sc.stop() ``` 上述代码展示了如何创建一个 RDD,并对其进行分区处理和转换操作。其中,`glom()` 方法用于将每个分区的内容打包成数组形式,便于观察各个分区的具体分布情况。 #### WordCount 示例分析 对于经典的 WordCount 问题,在 Spark 中通常会按照以下逻辑进行设计[^3]: 1. **加载原始数据**:从本地文件系统或 HDFS 加载文本文件作为输入源。 2. **分割单词**:将每行字符串拆分为单独的单词。 3. **映射键值对**:将每个单词映射为其对应的计数值 (初始设为 1)。 4. **聚合统计**:按单词分组并对各组内的计数值求和。 具体实现如下所示: ```scala // 定义 Spark 配置参数 val conf = new SparkConf().setMaster("local").setAppName("WordCountApp") val sc = new SparkContext(conf) // 读取文本文件 val textFile = sc.textFile("input.txt") // 对每一行进行单词划分和平铺展开 val words = textFile.flatMap(line => line.split("\\s+")) // 映射每个单词至其对应计数器 val wordCounts = words.map(word => (word, 1)) // 统计相同单词的数量总和 val finalResult = wordCounts.reduceByKey(_ + _) // 收集结果并打印出来 finalResult.collect().foreach(println) sc.stop() ``` 此脚本实现了完整的 WordCount 流程,涵盖了从数据加载、预处理直至最终汇总的所有阶段。 #### 关于惰性求值注意事项 需要注意的是,在 Spark 编程模型下,默认采用懒加载机制(Lazy Evaluation)。这意味着所有的 Transformation 类型的操作仅定义了计算规则而不会立即触发实际运算;只有当 Action 类别的指令被执行时才会真正启动整个 DAG 图形调度过程[^4]。 例如上面提到的 `collect()` 函数即属于典型的 Action 行动之一,它负责把分布在集群节点上的所有部分结果拉回到驱动端形成统一集合展示给用户查看。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值