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

这篇具有很好参考价值的文章主要介绍了【Spark编程基础】实验三RDD 编程初级实践(附源代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的

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

【Spark编程基础】实验三RDD 编程初级实践(附源代码),Spark,spark
(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

【Spark编程基础】实验三RDD 编程初级实践(附源代码),Spark,spark
(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()

【Spark编程基础】实验三RDD 编程初级实践(附源代码),Spark,spark(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)

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

(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 

【Spark编程基础】实验三RDD 编程初级实践(附源代码),Spark,spark
(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() 

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

(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 

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

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"

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

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 = 0
      var sum = 0.0
      for(i <- x._2){
      sum = sum + i
       n = n +1
      }
    val avg = sum/n
    val 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"

【Spark编程基础】实验三RDD 编程初级实践(附源代码),Spark,spark
【Spark编程基础】实验三RDD 编程初级实践(附源代码),Spark,spark文章来源地址https://www.toymoban.com/news/detail-843193.html

到了这里,关于【Spark编程基础】实验三RDD 编程初级实践(附源代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据实验 实验六:Spark初级编程实践

    实验环境:Windows 10 Oracle VM VirtualBox 虚拟机:cnetos 7 Hadoop 3.3 因为Hadoop版本为3.3所以在官网选择支持3.3的spark安装包 解压安装包到指定文件夹 配置spark-env.sh 启动成功 (1) 在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数; (2) 在spark-shell中读

    2024年02月04日
    浏览(83)
  • 大数据技术原理及应用课实验7 :Spark初级编程实践

    实验7  Spark初级编程实践 一、实验目的 1. 掌握使用Spark访问本地文件和HDFS文件的方法 2. 掌握Spark应用程序的编写、编译和运行方法 二、实验平台 1. 操作系统:Ubuntu18.04(或Ubuntu16.04); 2. Spark版本:2.4.0; 3. Hadoop版本:3.1.3。 三、实验步骤(每个步骤下均需有运行截图) 实

    2024年01月22日
    浏览(51)
  • RDD编程初级实践

    spark入门实战系列--8MLlib spark 实战_mob6454cc68310b的技术博客_51CTO博客 https://blog.51cto.com/u_16099212/7454034 Spark和Hadoop的安装-CSDN博客 https://blog.csdn.net/weixin_64066303/article/details/138021948?spm=1001.2014.3001.5501 启动spark-shell 注:我将下载的chapter5-data1.txt文件放在“/home/hadoop/下载”目录下。 读

    2024年04月27日
    浏览(37)
  • Spark 【RDD编程(一)RDD编程基础】

            在Spark中,RDD是弹性分布式数据集(Resilient Distributed Dataset)的缩写。通俗来讲,RDD是一种抽象的数据结构,用于表示分布式计算中的数据集合。它是Spark中最基本的数据模型,可以看作是一个不可变的、可分区、可并行处理的数据集合。这个数据集的全部或部分可

    2024年02月09日
    浏览(55)
  • Spark 初级编程实践

    什么是Spark? Spark是一个快速、通用、可扩展的大数据处理引擎,最初由加州大学伯克利分校的AMPLab开发。它提供了高级API,用于在大规模数据集上执行并行处理。Spark支持多种编程语言,包括Java、Scala、Python和R,因此被广泛应用于大数据分析和机器学习等领域。 1、掌握使用

    2024年02月02日
    浏览(38)
  • 2023_Spark_实验十:RDD基础算子操作

    Ø练习 1: Ø 练习 2: Ø 练习 3: Ø 练习 4: Ø 练习 5: groupByKey groupByKey会将RDD[key,value]按照相同的key进行分组,形成RDD[key,iterable[value]]的形式,有点类似于sql中的groupby,例如类似于mysql中的group_contact cogroup groupByKey是对单个RDD的数据进行分组,还可以使用一个叫作cogroup()的函

    2024年02月08日
    浏览(43)
  • 实验SparkSQL编程初级实践

    实践环境: Oracle VM VirtualBox 6.1.12 Ubuntu 16.04 Hadoop3.1.3 JDK1.8.0_162 spark2.4.0 python3.5 Windows11系统下pycharm2019.1专业版 实验目的: 通过实验掌握Spark SQL的基本编程方法; 熟悉RDD到DataFrame的转化方法; 熟悉利用Spark SQL管理来自不同数据源的数据。 实验内容,步骤与实验结果: Spark S

    2024年02月04日
    浏览(59)
  • 实验5:MapReduce 初级编程实践

    由于CSDN上传md文件总是会使图片失效 完整的实验文档地址如下: https://download.csdn.net/download/qq_36428822/85709497 实验内容与完成情况: (一)编程实现文件合并和去重操作 对于两个输入文件,即文件 A 和文件 B,请编写 MapReduce 程序,对两个文件进行合并, 并剔除其中重复的内

    2024年02月07日
    浏览(57)
  • 实验8 Flink初级编程实践

    由于CSDN上传md文件总是会使图片失效 完整的实验文档地址如下: https://download.csdn.net/download/qq_36428822/85814518 实验环境:本机:Windows 10 专业版 Intel® Core™ i7-4790 CPU @ 3.60GHz 8.00 GB RAM 64 位操作系统, 基于 x64 的处理器 Oracle VM VirtualBox 虚拟机:Linux Ubuntu 64-bit RAM 2048MB 处理器数量

    2024年02月09日
    浏览(31)
  • 大数据技术原理与应用实验4——MapReduce初级编程实践

    链接: 大数据技术原理与应用实验1——熟悉常用的HDFS操作 链接: 大数据技术原理与应用实验2——熟悉常用的Hbase操作 链接: 大数据技术原理与应用实验3——NoSQL和关系数据库的操作比较 (1)通过实验掌握基本的MapReduce编程方法; (2)掌握用MapReduce解决一些常见的数据处理

    2024年02月06日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包