[spark程序]统计人口平均年龄(本地文件)(详细过程)

一、题目描述

(1)编写Spark应用程序,该程序可以在本地文件系统中生成一个数据文件peopleage.txt,数据文件包含若干行(比如1000行,或者100万行等等)记录,每行记录只包含两列数据,第1列是序号,第2列是年龄。效果如下:

1    89
2    67
3    69
4    78

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

二、实现

1、生成数据文件peopleage.txt

1)创建程序的目录结构

创建一个存放代码的目录,进入目录下创建一个目录用来保存该题目所有文件(/swy/resource/spark/peopleage)

在peopleage目录下建立src/main/scala代码目录,专门用来保存scala代码文件,命令如下:

2)生成数据文件peopleage.txt的代码

创建一个代码文件GeneratePeopleAge.scala,用来生成数据文件peopleage.txt,命令如下:

代码如下:

import java.io.FileWriter
import java.io.File
import scala.util.Random

object GeneratePeopleAge{

    def main(args:Array[String]){
            val fileWriter = new FileWriter(new File("/swy/resource/spark/peopleage/peopleage.txt"),false)
            val rand = new Random()
            for (i <- 1 to 1000){
                fileWriter.write(i+" "+rand.nextInt(100))
                fileWriter.write(System.getProperty("line.separator"))
        }
            fileWriter.flush()
            fileWriter.close()
    }
}

3)sbt打包

退回到people目录下:

输入如下:

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

输入命令打包:

sbt package

打包成功:

4)运行文件,生成peopleage.txt

可以看到目录下已经生成peopleage.txt,查看文件:

2、计算所有人口的平均年龄

1)创建CountAvgage.scala

2)代码

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 peopleNum =lines.count()
                val totalAge = lines.map(line => line.split(" ")(1)).map(t => t.trim.toInt).collect().reduce((a,b) => a+b)
        println("Total Age is: " +totalAge+ "; Number of People is: " +peopleNum)
        val avgAge : Double = totalAge.toDouble / peopleNum.toDouble
        println("Average Age is: " +avgAge)
    }
}

3)打包

退回people文件夹,输入命令打包:

4)运行程序

输入如下命令:

结果:

参考:http://dblab.xmu.edu.cn/blog/1756-2/

原文地址:https://www.cnblogs.com/suwy/p/9350169.html

时间: 2024-11-09 17:32:39

[spark程序]统计人口平均年龄(本地文件)(详细过程)的相关文章

[spark程序]统计人口平均年龄(HDFS文件)(详细过程)

一.题目描述 (1)请编写Spark应用程序,该程序可以在分布式文件系统HDFS中生成一个数据文件peopleage.txt,数据文件包含若干行(比如1000行,或者100万行等等)记录,每行记录只包含两列数据,第1列是序号,第2列是年龄.效果如下: 1 89 2 67 3 69 4 78 (2)请编写Spark应用程序,对分布式文件系统HDFS中的数据文件peopleage.txt的数据进行处理,计算出所有人口的平均年龄. 二.实现 1.在分布式文件系统HDFS中生成一个数据文件peoplea

计算人口平均年龄

创建实验数据: from pyspark import SparkContext import random OutputFile = "file:///usr/local/spark/mycode/exercise/people" sc = SparkContext('local','createPeopleAgeData') peopleAge = [] for i in range(1,1001): rand = random.randint(1,100) peopleAge.a

02、创建RDD(集合、本地文件、HDFS文件)

Spark Core提供了三种创建RDD的方式,包括:使用程序中的集合创建RDD:使用本地文件创建RDD:使用HDFS文件创建RDD. 1.并行化集合 如果要通过并行化集合来创建RDD,需要针对程序中的集合,调用SparkContext的parallelize()方法.Spark会将集合中的数据拷贝到集群上去,形成一个分布式的数据集合,也就是一个RDD.相当于是,集合中的部分数据会到一个节点上,而另一部分数据会到其他节点上.然后就可以用并行的方式来操作这个分布式数据集合,即RDD. // 案例:

Spark程序本地运行

本次安装是在JDK安装完成的基础上进行的!  SPARK版本和hadoop版本必须对应!!! spark是基于hadoop运算的,两者有依赖关系,见下图: 前言: 1.环境变量配置: 1.1 打开"控制面板"选项 1.2.找到"系统"选项卡 1.3.点击"高级系统设置" 1.4.点击"环境变量" 2.新建和编辑环境变量 1.下载hadoop-2.6.0.tar.gz文件,并解压在本地 1.1 新建环境变量上配置 HADOOP_

数据分析小实践:统计每个国家存在心理健康问题的平均年龄

# -*- coding:utf-8 -*- """ 统计每个国家存在心理健康问题的平均年龄 """ import csv import matplotlib.pyplot as plt import numpy as np import matplotlib data_depth = "./data/survey.csv" dict = {} result = {} matplotlib.use('qt4agg')#指定默认

windows映射到本地文件夹中,打开程序

windows映射到本地文件夹中,打开程序,是在调用本地程序执行,如果不能删除或修改,是本地程序占用,关闭本地程序即可 实例: 在ubuntu上映射出来的一个文件夹,直接双击了jar文件,实质是调用本地的Java(TM) Platform SE binary程序,找到本地进程javaw,结束掉即可,跟远程 程序 操作 进程无关

DataInputStream(二进制输入流)和DataOutputStream二进制输出流(注意:in是从本地文件输入到程序中,out是从程序输出到本地种)

//切记以数据类型输出就以什么数据类型读入, //例如: dos.writeInt(100);写入,读取:dis.readUTF()有时会出现意想不到的错误,所以要时刻记得以数据类型输出就以什么数据类型读入 //DataInputStream(二进制输入流) public class DataInputStreamDemo { //二进制流(读操作) public static void main(String[] args) { FileInputStream fis = null; Data

FileOutputStream字节输出流和FileInputStream输入流(切记:out是输出到本地中,in是输入到程序中)这里介绍大文件和小文件的读取方式

//FileOutputStream public class FileOutputStreamDemo { /**字节流:适用于任何文件,以字节为单位,进行读写操作  *字节流操作步骤:  *1.创建文件对象  *2.创建字节流  *3.读写操作  *4.关闭流  */ //字节流(写操作) public static void main(String[] args) { String messageString = "hello world";  byte[] bytes = me

底层战详解使用Java开发Spark程序(DT大数据梦工厂)

Scala开发Spark很多,为什么还要用Java开发原因:1.一般Spark作为数据处理引擎,一般会跟IT其它系统配合,现在业界里面处于霸主地位的是Java,有利于团队的组建,易于移交:2.Scala学习角度讲,比Java难.找Scala的高手比Java难,项目的维护和二次开发比较困难:3.很多人员有Java的基础,确保对Scala不是很熟悉的人可以编写课程中的案例预测:2016年Spark取代Map Reduce,拯救HadoopHadoop+Spark = A winning combat