基于Hadoop的地震数据分析统计
源码下载地址:http://download.csdn.net/detail/huhui_bj/5645641
opencsv下载地址:http://download.csdn.net/detail/huhui_bj/5645661
地震数据下载地址:http://download.csdn.net/detail/huhui_bj/5645685
1 项目说明
2 项目准备
日期,时间,纬度(°),经度(°),深度(km),震级类型,震级值,事件类型,参考地名
2013-06-25,06:04:13.0,10.70,-42.60,10,Ms,6.5,eq,中大西洋海岭北部
2013-06-24,14:34:48.7,44.33,84.10,6,Ms,4.1,eq,新疆维吾尔自治区塔城地区乌苏市
2013-06-24,13:02:01.9,44.31,84.17,8,Ms,4.3,eq,新疆维吾尔自治区塔城地区乌苏市
2013-06-24,11:44:20.8,39.42,95.50,6,Ms,3.4,eq,甘肃省酒泉市肃北蒙古族自治县
3 程序说明
3.1 解析CSV文件
/*** 测试读取csv文件中的地震数据*/
package com.eq.test;import java.io.IOException;import au.com.bytecode.opencsv.CSVParser;public class CSVProcessingTest {/*** @param args*/// 从csv文件复制一行数据private final String LINE = "2013-06-23,22:31:30.3,24.70,99.21,5,ML,1.4,eq,云南施甸";public void testReadingOneLine() {String[] lines = null;try {// 用opencsv解析lines = new CSVParser().parseLine(LINE);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 打印解析结果for (String line : lines) {System.out.println(line);}}public static void main(String[] args) {// TODO Auto-generated method stubCSVProcessingTest csvProcessingTest = new CSVProcessingTest();csvProcessingTest.testReadingOneLine();}}
opencsv处理逗号分隔值值非常简单,该解析器仅返回一组String数组。
3.2 编写map函数
/*** 统计地震次数的区域的map*/
package com.eq.map;import java.io.IOException;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import au.com.bytecode.opencsv.CSVParser;public class EarthQuakeLocationMapper extendsMapper<LongWritable, Text, Text, IntWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {if (key.get() > 0) {String[] lines = new CSVParser().parseLine(value.toString());context.write(new Text(lines[8]), new IntWritable(1));}}
}
map函数十分简单。首先我们检查字节数(key对象)是否为0,这样可以避免CSV文件头部数据。然后传入地名,设置传出键。就是说,我们为每个地名编写一个计数器,当下文中reduce实现被调用时,获取一个键和一系列值。本例中,键是地名及其值,如下面所示:
"四川汶川":[1,1,1,1,1,1,1,1]
"甘肃天祝":[1,1,1,1]
"广西平果":[1,1,1,1,1,1]
注意:context.write(new Text(lines[8]), new IntWritable(1))构建了如上面所示的逻辑关系集合。context是一个保存各种信息的hadoop的数据结构。context将被传递到reduce实现,reduce获取这些值为1的值然后叠加起来,算出总数。因此,一个reduce的输出视图将是这样的:
"四川汶川":[8]
"甘肃天祝":[4]
"广西平果":[6]
3.3 编写reduce函数
package com.eq.reduce;import java.io.IOException;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;public class EarthQuakeLocationReducer extendsReducer<Text, IntWritable, Text, IntWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int count = 0;for (IntWritable value : values) {count++;}if (count >= 10) {context.write(key, new IntWritable(count));}}
}
reduce的实现也是非常简单的,传入到reduce中实际上是一个值的集合,我们所做的就是将他们加起来,然后写出一个新键值对来表示地点和次数。
"四川汶川":[1,1,1,1,1,1,1,1] --> "四川汶川":8
3.3 编写Hadoop的Job
/*** 定义一个hadoop job,用于统计不同地域的地震次数*/
package com.eq.job;import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import com.eq.map.EarthQuakeLocationMapper;
import com.eq.map.EarthQuakesPerDateMapper;
import com.eq.reduce.EarthQuakeLocationReducer;
import com.eq.reduce.EarthQuakesPerDateReducer;
import org.apache.hadoop.io.Text;public class EarthQuakesLocationJob {/*** @param args*/public static void main(String[] args) throws Throwable {// TODO Auto-generated method stubJob job = new Job();job.setJarByClass(EarthQuakesLocationJob.class);FileInputFormat.addInputPath(job, new Path("hdfs://localhost:9000/input/earthquake_data.csv"));//csv文件所在目录FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/output"));job.setMapperClass(EarthQuakeLocationMapper.class);job.setReducerClass(EarthQuakeLocationReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);System.exit(job.waitForCompletion(true)?0:1);}}
3.4程序运行结果
![](/assets/blank.gif)
/*** map函数的实现*/
package com.eq.map;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import au.com.bytecode.opencsv.CSVParser;public class EarthQuakesPerDateMapper extendsMapper<LongWritable, Text, Text, IntWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException {if (key.get() > 0) {try {// csv解析器CSVParser parser = new CSVParser();// 解析csv数据String[] lines = parser.parseLine(value.toString());String dtstr = lines[0];//map输出context.write(new Text(dtstr), new IntWritable(1));} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}}
reduce函数如下:
package com.eq.reduce;import java.io.IOException;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;public class EarthQuakesPerDateReducer extendsReducer<Text, IntWritable, Text, IntWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int count = 0;for (IntWritable value : values) {count++;}context.write(key, new IntWritable(count));}
}
Job如下:
/*** 定义一个hadoop job*/
package com.eq.job;import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import com.eq.map.EarthQuakesPerDateMapper;
import com.eq.reduce.EarthQuakesPerDateReducer;
import org.apache.hadoop.io.Text;public class EarthQuakesPerDayJob {/*** @param args*/public static void main(String[] args) throws Throwable {// TODO Auto-generated method stubJob job = new Job();job.setJarByClass(EarthQuakesPerDayJob.class);FileInputFormat.addInputPath(job, new Path("hdfs://localhost:9000/input/all_month.csv"));//csv文件所在目录FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/output"));job.setMapperClass(EarthQuakesPerDateMapper.class);job.setReducerClass(EarthQuakesPerDateReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);System.exit(job.waitForCompletion(true)?0:1);}}
这几段代码和之前的很相似,此处不再赘述。
基于Hadoop的地震数据分析统计相关推荐
- 基于python的气象数据分析统计服_基于Python的风向风速数据分析的设计与实现
基于 Python 的风向风速数据分析的设计与实现 李文倩 ; 刘婕 [期刊名称] < <信息通信> > [年 ( 卷 ), 期] 2019(000)009 [摘要] Pyth ...
- 基于Hadoop豆瓣电影数据分析(综合实验)
Hadoop作为处理大数据重要的分布式架构,熟练掌握每一个组件和知识点是非常重要的.随着现代社会产生的大量信息,大数据已不仅仅是调查领域:它是改变业务实践和营销策略的强大力量.据BCG称, 大数据可以 ...
- 基于hadoop的出租车数据分析(二)
http://mp.weixin.qq.com/s?__biz=MzI0NzM2MDExMw==&mid=2247483687&idx=1&sn=1862868680559dd ...
- 基于Hadoop和Spark体系的大数据分析平台构建
谢谢分享! 转载:http://www.sohu.com/a/249271561_481409 随着大数据.人工智能等技术的快速发展,企业对大数据平台的需求越来越强烈,通过大数据分析技术为企业提供经营 ...
- 基于Hadoop的数据分析平台搭建
企业发展到一定规模都会搭建单独的BI平台来做数据分析,即OLAP(联机分析处理),一般都是基于数据库技术来构建,基本都是单机产品.除了业务数据的相关分析外,互联网企业还会对用户行为进行分析,进一步挖掘 ...
- 大数据hadoop,spark数据分析之 基于大数据平台的运营商在线服务系统设计
今天向大家介绍一个帮助往届学生完成的毕业设计项目,大数据hadoop,spark数据分析之 基于大数据平台的运营商在线服务系统设计. 基于大数据平台的运营商在线服务系统设计 随着通信行业的业务拓展以及 ...
- 基于Hadoop + Hive框架进行电子商务数据分析的设计与实现
摘要 随着大数据时代的到来,企业挖掘出隐藏巨大的数据价值给带来了更多的市场机会.大数据存储,处理和处理的研究已是企业未来发展的趋势,因此,将开展基于Hadoop + Hive框架进行电子商务数据分析, ...
- 基于hadoop实现的关联规则挖掘的图书数据分析推荐系统
资源下载地址:https://download.csdn.net/download/sheziqiong/86763735 资源下载地址:https://download.csdn.net/downl ...
- 大数据开发:基于Hadoop的数据分析平台
互联网的发展,带来了各种数据的爆发式增长,所以接入互联网的相关操作行为,都化为虚拟的数据被记录了下来.大数据时代的带来,一个明显的变化就是全样本数据分析,面对TB/PB级及以上的数据规模,Hadoop ...
最新文章
- 解决新配置虚拟主机不生效的问题
- cmake 编译mysql_CentOS5.6下使用cmake编译MySQL5.5.13源码和安装
- VRRP+SmartLink双上行配置案例
- 理解ResNet结构与TensorFlow代码分析
- C# webapi 上传下载图片
- SQL Case When Then
- delphi 中 的 Split 函数
- 8种寻找机器学习数据集的方法 | 附数据集资源
- c语言中cot函数图像,cot函数图像
- 磁共振成像(Magnetic Resonance Imaging,MRI)学习资料汇总,包括:在线学习视频、网站、教材
- python输入直角三角形_如何用python做出直角三角形和其形成的锥形
- PROE 齿轮设计视频教程+直齿 斜齿 人字齿 内外啮齿 行星齿
- php计算距离元旦还有多少天,2020年元旦顺口溜
- oracle odi 配置安装,ODI的安装和配置
- git 主干修改合并到分支_git分支与主干合并操作
- 华硕路由器里的虚拟服务器在哪里,华硕RT-AC86U路由器怎么设置端口转发服务
- 数独解、多解(数据结构、栈、回溯法)
- 转:宁愿在真实前颤抖,也不愿在催泪弹下哭泣(今何在)
- iOS 答题功能实现
- eclipse问题(!MESSAGE Unhandled event loop exception !STACK 0 java.lang.NullPointerException 	at org.e)
热门文章
- android:六大基本布局
- LIO-SAM定位+Move_base导航+实车调试
- 图像处理——边缘提取
- 哈语驾考app的好处
- 编程中一些基本英语单词
- 服务器2012r2系统安装管理员,尽管受委派的管理员必须启用 Windows Server 2012 R2 中的更改权限设置 Acl cmdlet 无法正常工作...
- 移动机器人+机械手臂+视觉定位抓取物料
- 重要!考研入场的5个流程细节!
- com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
- Redis(SPEC文件打包)