寒假学习报告13

实验 4  RDD 编程初级实践

一、实验目的
(1)熟悉 Spark 的 RDD 基本操作及键值对操作; (2)熟悉使用 RDD 编程解决实际具体问题的方法。
二、实验平台
操作系统:Ubuntu16.04 Spark 版本:2.1.0
三、实验内容和要求
1.spark-shell 交互式编程
下载 chapter5-data1.txt,该数据集包含 了某大学计算机系的成绩,数据格式如下所示:

请根据给定的实验数据,在 spark-shell 中通过编程来计算以下内容:

创建目录,将chapter5-data1.txt放在指定目录

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

scala> val lines = sc.textFile("file:///usr/local/sparkdata01/chapter5-data1.txt")
scala> val par = lines.map(row=>row.split(",")(0))
scala> val distinct_par = par.distinct()
scala> distinct_par.count

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

scala> val lines = sc.textFile("file:///usr/local/sparkdata01/chapter5-data1.txt")
scala> val par = lines.map(row=>row.split(",")(1))
scala> val distinct_par = par.distinct()
scala> distinct_par.count

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

val lines = sc.textFile("file:///usr/local/sparkdata01/chapter5-data1.txt")
val pare = lines.filter(row=>row.split(",")(0)=="Tom")
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/sparkdata01/chapter5-data1.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(print)

(5)该系 DataBase 课程共有多少人选修;

val lines = sc.textFile("file:///usr/local/sparkdata01/chapter5-data1.txt")
val pare = lines.filter(row=>row.split(",")(1)=="DataBase")
pare.count

(6)各门课程的平均分是多少;

val lines = sc.textFile("file:///usr/local/sparkdata01/chapter5-data1.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/sparkdata01/chapter5-data1.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

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

}
}

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)

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.HashPartitioner
object avgscore {
    def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("AvgScore")
    val sc = new SparkContext(conf)
    val dataFile = "file:///usr/local/sparkdata01/1.txt,file:///usr/local/spark/sparklab/lab043/2.txt,file:///usr/local/sparkdata01/3.txt"
    val data = sc.textFile(dataFile,3)
    var score = data.map(line=>(line.split(" ")(0),line.split(" ")(1).toInt)).mapValues(x=>(x,1)).reduceByKey((x,y)=>(x._1+y._1,x._2+y._2)).mapValues(x=>(x._1/x._2)).collect().foreach(println)
    //res.saveAsTextFile("result")
}
}

原文地址:https://www.cnblogs.com/baimafeima/p/12304164.html

时间: 2024-11-03 00:55:42

寒假学习报告13的相关文章

寒假学习报告04

今天学习了Scala的剩余的基础内容和安装了spark.sbt. Scala 函数声明格式: def functionName ([参数列表]) : [return type] Scala 函数定义格式: def functionName ([参数列表]) : [return type] = { function body return [expr]} Scala 提供了多种不同的函数调用方式 调用方法的标准格式: functionName( 参数列表 ) 函数使用了实例的对象来调用: [ins

寒假学习报告9

今天外面雾霾严重,请大家出门务必带好口罩,全面遮掩口鼻,不要让飞沫喷出,尽量减少外出,减少去人员密集场所的次数,买菜不要扎堆,在家的各位请注意保持开窗通风,保证室内外空气流通,回家时先消毒,勤洗手,饭前便后请大家保证双手保持洁净的状态.吃饭要吃熟食,切忌生冷.油腻.海鲜等不易消化的食物.多喝水,喝热水,勤洗澡,及时更换衣物,换下来的衣服及时放到洗衣机里面清洗,做到病毒零传播,安全你我他.今天依旧没有出门,在家学习算法与数据结构.没有其他特殊情况,生命体征良好,体温正常,无发烧发热状况. 原文地址

寒假学习报告05

今天在虚拟机上安装sbt和maven,按着林子雨老师的教程来的,也不知道是什么原因老出问题,到现在也没解决好.还学一些简单的爬虫知识. 原文地址:https://www.cnblogs.com/baimafeima/p/12267035.html

寒假学习报告06

学了使用scarpy框架进行爬虫,爬取了某网站的部分信息. 部分代码: # -*- coding: utf-8 -*- import scrapy from dangdang01.items import Dangdang01Item from scrapy.http import Request class DdSpider(scrapy.Spider): name = 'dd' allowed_domains = ['dangdang.com'] start_urls = ['http://

寒假学习报告10

今天继续研究了爬虫 遇到了一些问题,各种查阅资料才得以解决. response.xpath.extract()爬取的值里面含有\r\n\t,如何去掉呢?需要normalize-space()比如:response.xpath('//div[@class=""]/text()').extract()使用normalize-space()后:response.xpath('normalize-space(//div[@class=""]/text())').extrac

寒假学习报告12

把昨天剩余的Scala基础编程做了,也按要求做了下一个实验的内容 3. 统计学生成绩 学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号.性别.课程名 1.课程名 2 等,后面每一行代表一个学生的信息,各字段之间用空白符隔开 给定任何一个如上格式的清单(不同清单里课程数量可能不一样),要求尽可能采用函 数式编程,统计出各门课程的平均成绩,最低成绩,和最高成绩:另外还需按男女同学分开, 分别统计各门课程的平均成绩,最低成绩,和最高成绩. 测试样例 1 如下: 样例 1 的统计结果输出为

苏黄的假期学习报告3

苏黄的假期学习报告3 复习进度 所有需要复习科目都已经过了一遍,但是时间所剩不多,因为本来寒假就短,我还因为病情住院.不爽! 春节安排 如果学校放假时间往后延一两个星期,我就可以和家人.同学在家乡过完一个完整的春节--从大年三十到元宵节.可惜学校就是想让我们这群年轻人体验一把春运抢不着返程票的滋味,真TMD的生气!我前几天就帮家里人收拾屋子,明天去买只活鸡宰了来祭祀.年三十肯定和家里人过,看不看春晚另外讲:初一就按小学.初中.高中.家这个路线去"行大运":初二回老家.之后就在吃汤圆.粽

安卓学习第13课——BaseAdapter

BaseAdapter创建这么一个对象,需要些四个方法. int getCount(); Object getItem(int position); long getItemId(int position);View getView(int position, View convertView, ViewGroup parent);(1)列表中的项数(2)返回值的列表内容(3)获得postion处的列表项的ID(4)该列表项里的组件 package com.example.baseadapter

HTML&CSS基础学习笔记13—无序列表

无序列表 有时我们的工作繁忙,杂事很多,怕忘记,就会把事情一件件列出来,防止忘记. 它们的排列顺序对于我们来说并不重要,可以随意调换,我们将它称为无序列表,HTML里用<ul>标签来表示无序列表,列表里的项目则用<li>标签来表示: 1 2 3 4 5 <ul>     <li></li>     <li></li>     ... </ul> 看一段实例代码: 对于的浏览器显示结果是这样的: 更多内容学习,请