实验三:spark编程实践

【题目】 Spark 上机练习题:统计人口平均年龄
1 )请编写 Spark 应用程序,该程序可以在本地文件系统中生成一个数据文件 peopleage.txt ,数据
文件包含若干行(比如 1000 行,或者 100 万行等等)记录,每行记录只包含两列数据,第 1 列是序
号,第 2 列是年龄。效果如下:
1 89
2 67
3 69
4 78
2 )请编写 Spark 应用程序,对本地文件系统中的数据文件 peopleage.txt 的数据进行处理,计算出
所有人口的平均年龄。
3 )请编写 Spark 应用程序,该程序可以在分布式文件系统 HDFS 中生成一个数据文件
peopleage.txt ,数据文件包含若干行(比如 1000 行,或者 100 万行等等)记录,每行记录只包含两
列数据,第 1 列是序号,第 2 列是年龄。效果如下:
1 89
2 67
3 69
4 78
4 )请编写 Spark 应用程序,对分布式文件系统 HDFS 中的数据文件 peopleage.txt 的数据进行处
理,计算出所有人口的平均年龄。
(1) 请编写 Spark 应用程序,该程序可以在本地文件系统中生成一个数据文件 peopleage.txt ,数据 文件包含若干行(比如 1000 行,或者 100 万行等等)记录,每行记录只包含两列数据,第 1 列是序 号,第 2 列是年龄。
/usr/local/spark/mycode/exercise/peopleage/src/main/scala这个目录是专门用来保存scala代码文件的。

 创建一个代码文件GeneratePeopleAge.scala

 1.

cd src/main/scala
2.
vim GeneratePeopleAge.scala

 在“/usr/local/spark/mycode/exercise/peopleage”目录下新建一个 simple.sbt文件,用来 支持sbt打包编译,命令如下:

 1.

cd /usr/local/spark/mycode/exercise/peopleage
2.
vim simple.sbt

 simple.sbt文件中输入如下内容

 name := "Simple Project"

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

 编译打包

/usr/local/sbt/sbt package 

 使用如下命令运行程序

1.

cd /usr/local/spark/mycode/exercise/peopleage
2.
/usr/local/spark/bin/spark-submit \
3.
> --class "GeneratePeopleAge" \
4.
> /usr/local/spark/mycode/exercise/peopleage/target/scala-2.11/simple-project_2.11-1.0.jar

 执行结束以后,可以看到,已经生成了数据文件 “/usr/local/spark/mycode/exercise/peopleage/peopleage.txt”。
可以使用如下命令查看文件内容:

 1.

cd /usr/local/spark/mycode/exercise/peopleage
2.
cat peopleage.txt
(2) 请编写 Spark 应用程序,对本地文件系统中的数据文件 peopleage.txt 的数据进行处理,计算出 所有人口的平均年龄。

 创建代码文件CountAvgAge.scala,命令如下:

 1.

cd /usr/local/spark/mycode/exercise/peopleage
2.
cd src/main/scala
3.
vim CountAvgAge.scala

 CountAvgAge.scala代码文件中输入如下代码:

 

//CountAvgAge.scala
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object CountAvgAge{
def main(args:Array[String]){
if (args.length<1){
println("Usage: CountAvgAge inputdatafile")
System.exit(1)
}
val conf = new SparkConf().setAppName("Count Average Age")
val sc = new SparkContext(conf)
val lines = sc.textFile(args(0),3)
val count = lines.count()
val totalAge = lines.map(line=>line.split(" ")(1)).map(t=>t.trim.toI
nt).collect().reduce((a,b)=>a+b)
println("Total Age is: "+totalAge+"; Number of People is:"+count)
val avgAge : Double = totalAge.toDouble / count.toDouble
println("Average Age is:"+avgAge)
}
}
编译打包:

 /usr/local/sbt/sbt package

 运行程序

 1.

cd /usr/local/spark/mycode/exercise/peopleage
2.
/usr/local/spark/bin/spark-submit \
3.
> --class "CountAvgAge" \
4.
> /usr/local/spark/mycode/exercise/peopleage/target/scala-2.11/simple-project_2.11-1.0.jar \
5.
> file:///usr/local/spark/mycode/exercise/peopleage/peopleage.txt
(3) 请编写 Spark 应用程序,该程序可以在分布式文件系统 HDFS 中生成一个数据文件 peopleage.txt ,数据文件包含若干行(比如 1000 行,或者 100 万行等等)记录,每行记录只包含两 列数据,第 1 列是序号,第 2 列是年龄。
请新建一个终端(可以使用快捷方式 CTRL+ALT+T ),进入 Linux Shell 环境,然后,启动 Hadoop
命令如下:
1.
cd /usr/local/hadoop
2.
./sbin/start-dfs.sh

 启动结束后,使用如下命令,查看是否启动成功:

1.
jps

 如果可以看到DataNodeNameNodeSecondaryNameNode三个进程,就说明启动成功了。

 然后,就可以编写Spark程序,向HDFS中写入一个数据文件,命令如下:

 1.

cd /usr/local/spark/mycode/exercise/peopleage
2.
cd src/main/scala
3.
vim GeneratePeopleAgeHDFS.scala

 GeneratePeopleAgeHDFS.scala代码文件中输入下以下代码:

 

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import scala.util.Random
object GeneratePeopleAgeHDFS {
def main(args: Array[String]) {
val outputFile = "hdfs://localhost:9000/user/hadoop/peopleage.txt"
//val outputFile1 = "file:///usr/local/spark/mycode/exercise/peoplea ge/peopleage1.txt"
val conf = new SparkConf().setAppName("GeneratePeopleAgeHDFS").setMaster("local[2]")
val sc = new SparkContext(conf)
val rand = new Random()
val array = new Array[String](1000)
for (i<-1 to 1000){
array(i-1)=i+" "+rand.nextInt(100)
}
val rdd = sc.parallelize(array)
rdd.foreach(println)
rdd.saveAsTextFile(outputFile)
}
}

 下面,在这个目录下/usr/local/spark/mycode/exercise/peopleage使用sbt编译打包工具对代码文件进行编译打包,命令如下:

/usr/local/sbt/sbt package

 打包成功以后,可以使用如下命令运行程序,生成数据文件:

 1.

cd /usr/local/spark/mycode/exercise/peopleage
2.
/usr/local/spark/bin/spark-submit \
3.
> --class "GeneratePeopleAgeHDFS" \
4.
> /usr/local/spark/mycode/exercise/peopleage/target/scala-2.11/simple-project_2.11-1.0.jar

 执行结束以后,可以看到,已经生成了数据文件peopleage.txt,这个文件是在HDFS中,可以使用如下命令查看文件内容:

 1.

cd /usr/local/hadoop
2.
./bin/hdfs dfs -cat /user/hadoop/peopleage.txt/*
(4) 请编写 Spark 应用程序,对分布式文件系统 HDFS 中的数据文件 peopleage.txt 的数据进行处 理,计算出所有人口的平均年龄。
可以直接使用前面第 (2) 步已经写好的代码文件 CountAvgAge.scala ,由于此前已经编译打包了,所
以,现在可以直接运行程序,可以使用如下命令运行程序,得到统计结果:
cd /usr/local/spark/mycode/exercise/peopleage
/usr/local/spark/bin/spark-submit \
--class "CountAvgAge" \
/usr/local/spark/mycode/exercise/peopleage/target/scala-2.11/simple-project_2.11-1.0.jar \
/user/hadoop/peopleage.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值