定制软件开发实验7 Spark初级编程实践

1.实验目的

(1)定制软件开发掌握使用访问本地文件和HDFS定制软件开发文件的方法

(2)掌握Spark定制软件开发应用程序的编写、定制软件开发编译和运行方法

2.实验平台

(1)操作系统:Ubuntu18.04(或Ubuntu16.04);

(2)Spark版本:2.4.0;

(3)版本:3.1.3。

3.实验步骤

(1)Spark读取文件系统的数据

1.在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;

2.在spark-shell中读取系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;

 

 

3.编写独立应用程序(推荐使用Scala语言),读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。

 

 SimpleApp.scala 和 simple.sbt内容:

  1. /* SimpleApp.scala */
  2. import org.apache.spark.SparkContext
  3. import org.apache.spark.SparkContext._
  4. import org.apache.spark.SparkConf
  5. object SimpleApp {
  6. def main(args: Array[String]) {
  7. val logFile = " hdfs://localhost:9000/user/hadoop/test.txt"
  8. val conf = new SparkConf().setAppName("Simple Application")
  9. val sc = new SparkContext(conf)
  10. val logData = sc.textFile(logFile, 2)
  11. val num = logData.count()
  12. printf("The num of this file is %d rows", num)
  13. }
  14. }

  1. name := "Simple Project"
  2. version := "1.0"
  3. scalaVersion := "2.11.12"
  4. libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"

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

对于两个输入文件A和B,编写Spark独立应用程序(推荐使用Scala语言),对两个文件进行合并,并剔除其中重复的内容,得到一个新文件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

 

remdup.scala

  1. import org.apache.spark.SparkContext
  2. import org.apache.spark.SparkContext._
  3. import org.apache.spark.SparkConf
  4. import org.apache.spark.HashPartitioner
  5. object RemDup {
  6. def main(args: Array[String]) {
  7. val conf = new SparkConf().setAppName("RemDup")
  8. val sc = new SparkContext(conf)
  9. val dataFile = "file:///home/charles/data"
  10. val data = sc.textFile(dataFile,2)
  11. val res = data.filter(_.trim().length>0).map(line=>(line.trim,"")).partitionBy(new HashPartitioner(1)).groupByKey().sortByKey().keys
  12. res.saveAsTextFile("result")
  13. }
  14. }

(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)

avgscore.scala

  1. import org.apache.spark.SparkContext
  2. import org.apache.spark.SparkContext._
  3. import org.apache.spark.SparkConf
  4. import org.apache.spark.HashPartitioner
  5. object AvgScore {
  6. def main(args: Array[String]) {
  7. val conf = new SparkConf().setAppName("AvgScore")
  8. val sc = new SparkContext(conf)
  9. val dataFile = "file:///home/hadoop/data"
  10. val data = sc.textFile(dataFile,3)
  11. 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 => {
  12. var n = 0
  13. var sum = 0.0
  14. for(i <- x._2){
  15. sum = sum + i
  16. n = n +1
  17. }
  18. val avg = sum/n
  19. val format = f"$avg%1.2f".toDouble
  20. (x._1,format)
  21. })
  22. res.saveAsTextFile("resultAvgscore")
  23. }
  24. }

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发