【Spark编程基础】RDD 编程初级实践(附源代码)

目录

  • 一、实验目的
  • 二、实验平台
  • 三、实验内容
    • 1.spark-shell 交互式编程
    • 2.编写独立应用程序实现数据去重
    • 3.编写独立应用程序实现求平均值问题

一、实验目的

1、熟悉 Spark 的 RDD 基本操作及键值对操作;
2、熟悉使用 RDD 编程解决实际具体问题的方法

二、实验平台

1、Scala 版本为 2.11.8。
2、操作系统:linux(推荐使用Ubuntu16.04)。
3、Jdk版本:1.7或以上版本。

三、实验内容

1.spark-shell 交互式编程

请到本教程官网的“下载专区”的“数据集”中下载 chapter5-data1.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
请根据给定的实验数据,在 spark-shell 中通过编程来计算以下内容:
(1)该系总共有多少学生;

val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt")
val par = lines.map(row=>row.split(",")(0)) 
val distinct_par = par.distinct() 
distinct_par.count

在这里插入图片描述
(2)该系共开设来多少门课程;
代码如下:

val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt")
val par = lines.map(row=>row.split(",")(1)) 
val distinct_par = par.distinct() 
distinct_par.count

在这里插入图片描述
(3)Tom 同学的总成绩平均分是多少;
代码如下:

val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt")
val pare = lines.filter(row=>row.split(",")(0)=="Tom") 
pare.foreach(println) 
pare.map(row=>(row.split(",")(0),row.split(",")(2).toInt)).mapValues(x=>(x,1)).reduceByKey((x,y 
) => (x._1+y._1,x._2 + y._2)).mapValues(x => (x._1 / x._2)).collect()

在这里插入图片描述(4)求每名同学的选修的课程门数;
代码如下:

val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt")
val pare = lines.map(row=>(row.split(",")(0),row.split(",")(1))) 
pare.mapValues(x => (x,1)).reduceByKey((x,y) => (" ",x._2 + y._2)).mapValues(x => 
x._2).foreach(println)

在这里插入图片描述

(5)该系 DataBase 课程共有多少人选修;
代码如下:

val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt")
val pare = lines.filter(row=>row.split(",")(1)=="DataBase") 
pare.count 

在这里插入图片描述
(6)各门课程的平均分是多少;
代码如下:

val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt")
val pare = lines.map(row=>(row.split(",")(1),row.split(",")(2).toInt)) 
pare.mapValues(x=>(x,1)).reduceByKey((x,y) => (x._1+y._1,x._2 + y._2)).mapValues(x => (x._1 / x._2)).collect() 

在这里插入图片描述

(7)使用累加器计算共有多少人选了 DataBase 这门课。
代码如下:

val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/data.txt")
val pare = lines.filter(row=>row.split(",")(1)=="DataBase").map(row=>(row.split(",")(1),1)) 
val accum = sc.longAccumulator("My Accumulator") 
pare.values.foreach(x => accum.add(x)) 
accum.value 

在这里插入图片描述

2.编写独立应用程序实现数据去重

对于两个输入文件 A 和 B,编写 Spark 独立应用程序,对两个文件进行合并,并剔除其
中重复的内容,得到一个新文件 C。下面是输入文件和输出文件的一个样例,供参考。
输入文件 A 的样例如下:
20170101 x
20170102 y
20170103 x
20170104 y
20170105 z
20170106 z
输入文件 B 的样例如下:
20170101 y
20170102 y
20170103 x
20170104 z
20170105 y
根据输入的文件 A 和 B 合并得到的输出文件 C 的样例如下:
20170101 x
20170101 y
20170102 y
20170103 x
20170104 y
20170104 z
20170105 y
20170105 z
20170106 z
sacla代码:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.HashPartitioner
object task1 {def main(args: Array[String]) {val conf = new SparkConf().setAppName("task2_1")val sc = new SparkContext(conf)val dataFile = "file:///home/hadoop/input1/A.txt,file:///home/hadoop/input1/B.txt" val res = sc.textFile(dataFile,2) .filter(_.trim().length>0).map(line=>(line.trim,"")).partitionBy(new
HashPartitioner(1)).groupByKey().sortByKey().keys
res.saveAsTextFile("file:///home/hadoop/output1/result") }
}

simple.sbt代码:

name := "RemDup"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"

在这里插入图片描述

3.编写独立应用程序实现求平均值问题

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生
名字,第二个是学生的成绩;编写 Spark 独立应用程序求出所有学生的平均成绩,并输出到
一个新文件中。下面是输入文件和输出文件的一个样例,供参考。
Algorithm 成绩:
小明 92
小红 87
小新 82
小丽 90
Database 成绩:
小明 95
小红 81
小新 89
小丽 85
Python 成绩:
小明 82
小红 83
小新 94
小丽 91
平均成绩如下:
(小红,83.67)
(小新,88.33)
(小明,89.67)
(小丽,88.67)

sacla代码:

import org.apache.spark.SparkConf
import org.apache.spark.HashPartitioner
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._
object task2 {def main(args: Array[String]) {val conf = new SparkConf().setAppName("AvgScore")val sc = new SparkContext(conf)val dataFile = "file:///home/hadoop/input1/Algorithm.txt,file:///home/hadoop/input1/Database.txt,file:///home/hadoop/input1/Python.txt"  val data = sc.textFile(dataFile,3)val res = data.filter(_.trim().length>0).map(line=>(line.split(" ")(0).trim(),line.split(" ")(1).trim().toInt)).partitionBy(new HashPartitioner(1)).groupByKey().map(x => {var n = 0var sum = 0.0for(i <- x._2){sum = sum + in = n +1}val avg = sum/nval formattedAvg = f"$avg%1.2f".toDouble(x._1, formattedAvg)})res.saveAsTextFile("file:///home/hadoop/output2/result")  }
}

simple.sbt代码:

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2871116.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【LabVIEW FPGA入门】浮点数类型支持

如今&#xff0c;使用浮点运算来设计嵌入式系统的需求变得越来越普遍。随着 FPGA 因其固有的大规模并行性而在浮点性能方面继续超越微处理器&#xff0c;这种情况正在加剧。线性代数和数字信号处理 (DSP) 等高级算法可以受益于浮点数据类型的高动态范围精度。LabVIEW FPGA 通过…

【Godot4自学手册】第二十五利用PointLight2D节点点缀夜晚灯光

夜晚来临了&#xff0c;少不了灯光的出现&#xff0c;今天就用PointLight2D节点来实现夜晚的忽闪忽闪灯光效果。 一、添加场景 1、添加PointLight2D场景 单击添加新节点按钮&#xff0c;在场景面板中选择其他节点&#xff0c;在弹出创建Node对话框中选择 PointLight2D&#…

Vue中使用Lodash

Vue中使用Lodash 前言安装Lodash引用方法vue中使用1、cloneDeep 深拷贝2、uniq 数组去重3、uniqWith 数组对象去重 isEqual 深度比对4、intersection 提取数组相同元素5、chunk 数组切分6、compact去除假值7、reject:根据条件删除指定的值8、find:查找结果的第一个值9、filter:…

基于sortablejs实现拖拽element-ui el-table表格行进行排序

可以用原生的dragstart、drag、dragend、dragover、drop、dragleave实现这个效果&#xff0c;但是有现成的轮子就不要重复造了&#xff0c;看效果&#xff1a; <template><el-table :class"$options.name" :data"tableData" ref"table"…

Android Kotlin知识汇总(一)编程语言

在 2019 年 Google I/O 大会上宣布今后将优先采用 Kotlin 进行 Android 开发。Kotlin 是一种富有表现力且简洁的编程语言&#xff0c;不仅可以减少常见代码错误&#xff0c;还可以轻松集成到现有应用中。如果您想构建 Android 应用&#xff0c;建议您从 Kotlin 开始着手&#x…

java.lang.NoSuchMethodException异常解决

标题 java.lang.NoSuchMethodException异常的正确解决方法摘要&#x1f680; 异常介绍&#x1f9d0; 异常原因分析&#x1f6e0; 解决方法核对方法名称和参数使用正确的方法签名调整方法访问权限 &#x1f4dd; 解决步骤详解&#x1f5a5; 代码案例演示❓ QA部分Q: 如何区分jav…

使用canvas实现图纸标记及回显

图纸 图纸标记后的效果图 最近做的一个qms项目里面&#xff0c;需要前端在图纸上实现标记及标记后的内容还要能够回显&#xff0c;然后后端通过标记的点&#xff0c;去读取标记图纸的内容&#xff0c;如一些公式、数据之类的&#xff0c;目前实现的功能有 在图纸上面进行矩形…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…

MyBatis基础使用

MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Java Objects&am…

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——A 题:生产线的故障自动识别与人员配置具体思路以及源代码分析

一、问题背景 随着新兴信息技术的大规模应用&#xff0c;工业生产线的智能化控制技术日益成熟。自动生产线 可以自动完成物品传送、物料填装、产品包装和质量检测等过程&#xff0c;极大地提高了生产效率和 产品质量&#xff0c;减少了生产成本。自动生产线融入故障智能报警…

HTML CSS入门:从基础到实践

&#x1f310; HTML & CSS入门&#xff1a;从基础到实践 &#x1f3a8; &#x1f4d6; 引言 HTML和CSS是构建网页的基石。HTML&#xff08;超文本标记语言&#xff09;用于创建网页内容&#xff0c;而CSS&#xff08;层叠样式表&#xff09;则用于美化这些内容。无论你是…

Blocks —— 《Objective-C高级编程 iOS与OS X多线程和内存管理》

目录 Blocks概要什么是BlocksOC转C方法关于几种变量的特点 Blocks模式Block语法Block类型 变量截获局部变量值__block说明符截获的局部变量 Blocks的实现Block的实质 Blocks概要 什么是Blocks Blocks是C语言的扩充功能&#xff0c;即带有局部变量的匿名函数。 顾名思义&#x…

Day18 Java学生管理系统

Day18 Java学生管理系统 一、需求分析 考虑的方面&#xff1a; 用户需求、功能需求、非功能性需求、约束条件、优先级和权衡、可追踪性、需求验证。 二、项目搭建 搭建学生管理系统 1、创建项目的main ;pojo ; sms ; utils包。 2、编写系统的 增&#xff08;涉及到扩容–…

17.WEB渗透测试--Kali Linux(五)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;16.WEB渗透测试--Kali Linux&#xff08;四&#xff09;-CSDN博客 1.ettercap简介与使用…

【技术类-04】python实现docx表格文字和段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

作品展示&#xff1a; 背景需求&#xff1a; 把python实现docx表格文字和段落文字的“手动换行符&#xff08;软回车&#xff09;”变成“段落标记&#xff08;硬回车&#xff09;合并在一起统计数量 【技术类-02】python实现docx段落文字的“手动换行符&#xff08;软回车&a…

一起玩儿3D打印机——03 Marlin固件的获取和安装环境的配置

摘要&#xff1a;本文介绍Marlin固件的获取和安装环境的配置 Marlin是一款开源软件&#xff0c;其主页为&#xff1a;https://marlinfw.org/&#xff0c;首页正中就是下载连接&#xff0c;如下图所示&#xff1a; 单击下面的“Download Marlin 2.1.2.2”按钮就会进入下载页面&a…

彻底学会系列:一、机器学习之梯度下降(1)

1 梯度下降概念 1.1 概念 梯度下降是一种优化算法&#xff0c;用于最小化一个函数的值&#xff0c;特别是用于训练机器学习模型中的参数&#xff0c;其基本思想是通过不断迭代调整参数的值&#xff0c;使得函数值沿着梯度的反方向逐渐减小&#xff0c;直至达到局部或全局最小…

AntV L7深圳智慧城市

本案例使用L7库和Mapbox GL JS构建深圳智慧城市。 文章目录 1. 引入 CDN 链接2. 引入组件3. 创建地图4. 创建场景5. 获取数据6. 创建面图层7. 演示效果8. 代码实现 1. 引入 CDN 链接 <!-- 1.引入CDN链接 --> <script src"https://unpkg.com/antv/l7"><…

Centos yum报错‘Connection timed out after 30002 milliseconds‘) 正在尝试其它镜像。解决办法

修改源后更新报错 我有两个Centos 一个7 一个8&#xff0c;疏忽在7上面配置了8的源后报错&#xff0c;通过下面的报错发现提示的是Centos7的源找不到&#xff0c;才意识到是不是配置错了源。 报错信息&#xff1a; http://mirrors.aliyun.com/centos/7/AppStream/x86_64/os/r…

Java 面向对象(类与对象 成员方法 方法重载 可变参数 构造方法 / 构造器 this关键字 包 访问修饰符)

目录 一、类与对象1. 类与对象的定义2. 类和对象的内存分配机制 二、成员方法1. 成员方法的定义2. 方法的调用机制3. 成员方法传参机制 三、方法重载四、可变参数1. 基本概念2. 基本语法3. 应用 五、 构造方法 / 构造器1. 特点2. 使用案例3. 对象创建的流程 六、this关键字1. 运…