需求:

现有部分GN数据,数据为全省数据,解析GN数据,将数据按照 /OutputData/城市名称/日期(YYYY-MM-dd)/类型(固定Gn)/imsi.txt  (有很多imsi)的结构,将相同城市,相同日期,相同imsi(国际移动用户标识),类型为Gn的数据汇总到一起,。

解析出新的IMSI, VULUME、CELLID、TAC、city、time

数据:

1|460002452699237|8655890276520178|8613786401241|21.176.70.136|29588|255|56042|221.177.173.83|221.177.173.64|221.177.173.35|221.177.173.35|2|cmnet|101|a788057f91cf3a89|1480752079784|1480752079788|18|26|0|33931|8.8.8.8|53|460|0|73|366|1|1|0|0|0|0|0|0|183.232.72.164|0|1|4|6|6|2260069379|||||||||||||||

数据说明:数据列的分隔符为“|”,截取出数据的第六个和第八个字段,两个字段使用“_”拼接,构成城市名称编号。

日期字段为第十七个数据。

Imsi数据为第二个数据

GnMapper 
package GN.demo01;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;public class GnMapper extends Mapper<LongWritable, Text,Text,Text> {private SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd");@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String[] split = value.toString().split("\\|");context.write(new Text("/OutputData/"+ split[5]+"_"+split[7]+"/"+df.format(new Date(Long.parseLong(split[16])))+"/Gn/"+split[1]),new Text(value));}}
GnReducer
package GN.demo01;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;public class GnReducer extends Reducer<Text, Text, Text, NullWritable> {FSDataOutputStream fsDataOutputStream;@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {Configuration configuration = context.getConfiguration();FileSystem fileSystem = null;try {fileSystem = FileSystem.get(new URI("hdfs://192.168.100.201:8020"),configuration);} catch (URISyntaxException e) {e.printStackTrace();}String str = "";fsDataOutputStream = fileSystem.create(new Path(key.toString() + ".txt"));for (Text value : values) {str += value.toString() + "\r\n";}byte[] bytes = str.getBytes();fsDataOutputStream.write(bytes,0,bytes.length);fsDataOutputStream.close();}}

GnDriver

package GN.demo01;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;public class GnDriver extends Configured implements Tool {@Overridepublic int run(String[] args) throws Exception {Configuration conf = new Configuration();
//        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");Job job = Job.getInstance(conf);
//        job.setNumReduceTasks(30);job.setJarByClass(GnDriver.class);job.setInputFormatClass(TextInputFormat.class);TextInputFormat.addInputPath(job,new Path("E:\\2019-传智项目\\企业需求实战\\01_湖南移动项目需求\\数据\\gn"));job.setMapperClass(GnMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);job.setReducerClass(GnReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(NullWritable.class);job.setOutputFormatClass(TextOutputFormat.class);TextOutputFormat.setOutputPath(job,new Path("E:\\2019-传智项目\\企业需求实战\\01_湖南移动项目需求\\数据\\Out"));boolean b = job.waitForCompletion(true);return b?0:1;}public static void main(String[] args) throws Exception{ToolRunner.run(new GnDriver(),args);}
}

MapReduce算法(将数据按照 /OutputData/城市名称/日期(YYYY-MM-dd)/类型(固定Gn)/imsi.txt )相关推荐

  1. MapReduce算法–了解数据连接第二部分

    自从我上一次发布以来已经有一段时间了,就像我上一次大休息一样,我正在Coursera上一些课程. 这次是Scala中的函数式编程 原理和反应式编程原理 . 我发现它们都是不错的课程,如果有时间的话,建 ...

  2. MapReduce算法–了解数据联接第1部分

    在本文中,我们继续执行一系列实现算法的系列,该算法在使用MapReduce进行数据密集型文本处理中找到,这一次讨论数据联接. 虽然我们将讨论在Hadoop中联接数据的技术并提供示例代码,但在大多数情况 ...

  3. SAP HR 考勤 PT60执行时报错“在$无工作中心数据 YYYY.MM.DD”问题解决

    该问题出现的原因是:"时间评估的起始日期"小于"入职日期". ["时间评估的起始日期"等于PT数据中最早的"日期".] ...

  4. SAP HR 考勤 PT60执行时报错“在$无工作中心数据 YYYY.MM.DD”问题解决<转载>

    原文链接:https://blog.csdn.net/csucoder_zone/article/details/105042403 该问题出现的原因是:"时间评估的起始日期"小于 ...

  5. mapreduce 算法_MapReduce算法–了解数据联接第二部分

    mapreduce 算法 自从我上一次发布以来已经有一段时间了,就像我上一次大休息一样,我正在Coursera上一些课程. 这次是Scala中的函数式编程 原理和React式编程原理 . 我发现它们都 ...

  6. mapreduce 算法_MapReduce算法–了解数据联接第1部分

    mapreduce 算法 在本文中,我们继续执行一系列实现算法的系列,该算法在使用MapReduce进行数据密集型文本处理中找到,这一次讨论数据联接. 虽然我们将讨论在Hadoop中联接数据的技术并提 ...

  7. Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称

    Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称   这一节主要是使用xpath解析爬取全国城市名称 这里使用的网址是:空气质量历史数据查询   这一个案例体现的点主要是xpat ...

  8. java对象转json字符串日期格式_fastJSON字符串类型数据中的日期转换为Java bean的日期对象...

    fastJSON字符串类型数据中的日期转换为Java bean的日期对象 Person.java import java.io.Serializable; import java.util.Date; ...

  9. python读取excel日期和时间数据_python 在excel文件中写入date日期数据,以及读取excel日期数据,如何在python中正确显示date日期。...

    如何通过python写入date数据了? 写入还是很简单的. import xlwt3 import  datetime as dt workbook = xlwt.Workbook() worksh ...

  10. android往天气接口里面传城市,Android使用中国天气网API数据通过城市名称获取天气情况...

    项目要求在应用首页面展示本地当日天气的概况,首先想到的是google和雅虎,前者很久之前接触过,听说后来用不了了,后者由于邮箱事件的缘故个人不喜欢(虽然貌似苹果也用雅虎的天气预报),之后又想到了前段时 ...

最新文章

  1. php常量定义表达式,从表达式创建PHP类常量的最佳解决方法?
  2. 【深入理解JVM】JVM概述
  3. 迅为工业级iMX6Q开发板全新升级兼容PLUS版本|四核商业级|工业级|双核商业级...
  4. G面经prepare: Straight Partition of A Deck of Cards
  5. mysql数据库备份和还原的命令_Mysql数据库备份和还原常用的命令
  6. Pyinstaller打包过程中报错“AttributeError: 'str' object has no attribute 'items''”问题解决
  7. headtail命令
  8. QFIL and FASTBOOT
  9. Unity3D水下动物模型大集合
  10. 阿里云短信验证码发送
  11. visual studio 2010和注册码
  12. 【集合论】关系闭包 ( 自反闭包 | 对称闭包 | 传递闭包 )
  13. 陈洁kiki宠粉节狂欢夜观看破千万!四年磨一剑将宠粉做到极致
  14. OpenGL法线贴图
  15. 网络安全风险无处不在
  16. MT7688 openwrt 4G调试
  17. Eclipse is not responding
  18. 游戏开挂的罪与非罪——从“王者荣耀外挂案”说起
  19. 【无标题】vue -解决“You may use specia I comments to disa some warnings. ble Use//eslint-disable-next-line
  20. 最长公共子序列_使用序列化查找对象中的脏字段

热门文章

  1. 利用E4A编写APP获取安卓手机加速度传感器数据
  2. 网页显示不正常怎么修复
  3. 1984年图灵奖--尼克劳斯·沃思简介
  4. uniapp实现退款理由的界面
  5. mac excel 换行 快捷键
  6. Python代码破解路由器config.bin从入门到放弃
  7. STM32时钟简介及系统时钟频率的更改方式
  8. win10怎么快捷锁定计算机,win10一键快速锁屏快捷键的两种使用方法
  9. Python爬虫基础讲解(二十七):scrapy 框架—ltem和scrapy.Request
  10. 高等数学(第七版)同济大学 习题7-2 个人解答