MapReduce综合应用案例 — 电信数据清洗

文章目录

  • 第1关:数据清洗


第1关:数据清洗

测试说明
平台会对你编写的代码进行测试:

评测之前先在命令行启动hadoop:start-all.sh;

点击测评后MySQL所需的数据库和表会自动创建好。

PhoneLog:封装对象
LogMR:MapReduce操作
DBHelper:MySQL工具类

具体本关的预期输出请查看右侧测试集。

因为大数据实训消耗资源较大,且map/reduce运行比较耗时,所以评测时间较长,大概在60秒左右,请耐心等待。
在这里插入图片描述
在该箭头所指的位置进行代码文件的切换。

代码文件如下:
LogMR类

package com;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class LogMR {/********** begin **********/static class MyMapper extends Mapper<LongWritable, Text, PhoneLog, NullWritable> {Map<String, String> userMap = new HashMap<>();Map<String, String> addressMap = new HashMap<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");PhoneLog pl = new PhoneLog();Text text = new Text();@Overrideprotected void setup(Context context) throws IOException, InterruptedException {Connection connection = DBHelper.getConnection();try {Statement statement = connection.createStatement();String sql = "select * from userphone";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {String phone = resultSet.getString(2);String trueName = resultSet.getString(3);userMap.put(phone, trueName);}String sql2 = "select * from allregion";ResultSet resultSetA = statement.executeQuery(sql2);while (resultSetA.next()) {String phone = resultSetA.getString(2);String trueName = resultSetA.getString(3);addressMap.put(phone, trueName);}} catch (SQLException e) {e.printStackTrace();}}@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String str = value.toString();String[] split = str.split(",");if (split.length == 6) {String trueName1 = userMap.get(split[0]);String trueName2 = userMap.get(split[1]);String address1 = addressMap.get(split[4]);String address2 = addressMap.get(split[5]);long startTimestamp = Long.parseLong(split[2]);String startTime = sdf.format(startTimestamp * 1000);long endTimestamp = Long.parseLong(split[3]);String endTime = sdf.format(endTimestamp * 1000);long timeLen = endTimestamp - startTimestamp;pl.SetPhoneLog(trueName1, trueName2, split[0], split[1], startTime, endTime, timeLen, address1,address2);context.write(pl, NullWritable.get());}}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(LogMR.class);job.setMapperClass(MyMapper.class);job.setMapOutputKeyClass(PhoneLog.class);job.setMapOutputValueClass(NullWritable.class);job.setNumReduceTasks(0);Path inPath = new Path("/user/test/input/a.txt");Path out = new Path("/user/test/output");FileInputFormat.setInputPaths(job, inPath);FileOutputFormat.setOutputPath(job, out);job.waitForCompletion(true);}/********** end **********/
}

DBHelper类

package com;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBHelper {/********** begin **********/private static final String driver = "com.mysql.jdbc.Driver";private static final String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8";private static final String username = "root";// 数据库的用户名private static final String password = "123123";// 数据库的密码:这个是自己安装数据库的时候设置的,每个人不同。private static Connection conn = null; // 声明数据库连接对象static {try {Class.forName(driver);} catch (Exception ex) {ex.printStackTrace();}}public static Connection getConnection() {if (conn == null) {try {conn = DriverManager.getConnection(url, username, password);} catch (SQLException e) {e.printStackTrace();} // 连接数据库return conn;}return conn;}/********** end **********/
}

PhoneLog类

package com;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableComparable;
public class PhoneLog implements WritableComparable<PhoneLog> {private String userA;private String userB;private String userA_Phone;private String userB_Phone;private String startTime;private String endTime;private Long timeLen;private String userA_Address;private String userB_Address;public PhoneLog() {}public void SetPhoneLog(String userA, String userB, String userA_Phone, String userB_Phone, String startTime,String endTime, Long timeLen, String userA_Address, String userB_Address) {this.userA = userA;this.userB = userB;this.userA_Phone = userA_Phone;this.userB_Phone = userB_Phone;this.startTime = startTime;this.endTime = endTime;this.timeLen = timeLen;this.userA_Address = userA_Address;this.userB_Address = userB_Address;}public String getUserA_Phone() {return userA_Phone;}public void setUserA_Phone(String userA_Phone) {this.userA_Phone = userA_Phone;}public String getUserB_Phone() {return userB_Phone;}public void setUserB_Phone(String userB_Phone) {this.userB_Phone = userB_Phone;}public String getUserA() {return userA;}public void setUserA(String userA) {this.userA = userA;}public String getUserB() {return userB;}public void setUserB(String userB) {this.userB = userB;}public String getStartTime() {return startTime;}public void setStartTime(String startTime) {this.startTime = startTime;}public String getEndTime() {return endTime;}public void setEndTime(String endTime) {this.endTime = endTime;}public Long getTimeLen() {return timeLen;}public void setTimeLen(Long timeLen) {this.timeLen = timeLen;}public String getUserA_Address() {return userA_Address;}public void setUserA_Address(String userA_Address) {this.userA_Address = userA_Address;}public String getUserB_Address() {return userB_Address;}public void setUserB_Address(String userB_Address) {this.userB_Address = userB_Address;}@Overridepublic void write(DataOutput out) throws IOException {out.writeUTF(userA);out.writeUTF(userB);out.writeUTF(userA_Phone);out.writeUTF(userB_Phone);out.writeUTF(startTime);out.writeUTF(endTime);out.writeLong(timeLen);out.writeUTF(userA_Address);out.writeUTF(userB_Address);}@Overridepublic void readFields(DataInput in) throws IOException {userA = in.readUTF();userB = in.readUTF();userA_Phone = in.readUTF();userB_Phone = in.readUTF();startTime = in.readUTF();endTime = in.readUTF();timeLen = in.readLong();userA_Address = in.readUTF();userB_Address = in.readUTF();}@Overridepublic String toString() {return userA + "," + userB + "," + userA_Phone + "," + userB_Phone + "," + startTime + "," + endTime + ","+ timeLen + "," + userA_Address + "," + userB_Address;}@Overridepublic int compareTo(PhoneLog pl) {if(this.hashCode() == pl.hashCode()) {return 0;}return -1;}
}

之后在命令行启动hadoop

start-all.sh

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用ThreeJS写了一个圣诞树

使用什么技术写 一开始我准备用htmlcss去写&#xff0c;后来感觉使用html和css写就太low了&#xff0c;没有一点点心意。就打算用three.js写一个3d版本的。 简单介绍一下threejs Three.js是一个基于原生WebGL封装运行的三维引擎&#xff0c;是最著名的3D WebGL JavaScriptTh…

SpringBoot3知识总结

SpringBoot3 1、简介 1. 前置知识 Java17Spring、SpringMVC、MyBatisMaven、IDEA 2. 环境要求 环境&工具版本&#xff08;or later&#xff09;SpringBoot3.0.5IDEA2022Java17Maven3.5 3. SpringBoot是什么 Spring Boot是Spring项目中的一个子工程&#xff0c;与我们…

第二百一十五回 如何创建单例模式

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享三个使用TextField的细节"沉浸式状态样相关的内容&#xff0c;本章回中将介绍 如何创建单例模式.闲话休提&#xff0c;让我们一起Talk Flutter吧。 …

java实现局域网内视频投屏播放(三)投屏原理

常见投屏方案 常见的投屏方案主要有以下几种&#xff1a; DLNA DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟)。DLNA委员会已经于2017年1月5日正式解散&#xff0c;原因是旧的标准已经无法满足新设备的发展趋势&#xff0c;DLNA标准将来也不会再更新。但是…

【MySQL】数据库基础入门 安装MySQL

目录 介绍&#xff1a; 安装MySQL: 设置 root 账号密码 2.配置环境变量 2.找到 Path 系统变量, 点击 "编辑" 介绍&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种用于管理和存储数据的软件。 安装MySQL: …

MyBatis进行CRUD中添加数据实现主键回填

文章目录 MyBatis进行CRUD中添加数据实现主键回填1、创建一个mybatis项目2、实现添加数据时主键回填在MyBatisTest.java中添加下面方法在UserMapper.java中添加对应的属性在UserMapper.xml中添加sql语句如下运行结果如下(取消commit方法注释后就不会出现Rolling back回滚进行真…

JRT打印元素绘制协议整合PDF

打印不光要能打印内部的单据&#xff0c;对于检验的打印还有外送回传的PDF报告也需要能够打印&#xff0c;所以需要把打印PDF文件整合进来&#xff0c;为此给打印元素绘制协议增加PDF类型的元素。 定义如下&#xff0c;由绘制协议按地址下载文件后和其他打印元素整合&#xff…

107基于matlab的模糊推理系统(ANFIS)的时间序列预测

基于matlab的模糊推理系统&#xff08;ANFIS&#xff09;的时间序列预测&#xff0c;输出训练集、测试集和预测数据结果&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 107 时间序列预测模糊推理系统 (xiaohongshu.com)

[ZJCTF 2019]NiZhuanSiWei1

[ZJCTF 2019]NiZhuanSiWei1 预测试 打开网页就是代码&#xff1a; <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password"]; if(isset($text)&&(file_get_contents($text,r)"welcome to the zjct…

【论文笔记】MCANet: Medical Image Segmentation withMulti-Scale Cross-Axis Attention

医疗图像分割任务中&#xff0c;捕获多尺度信息、构建长期依赖对分割结果有非常大的影响。该论文提出了 Multi-scale Cross-axis Attention&#xff08;MCA&#xff09;模块&#xff0c;融合了多尺度特征&#xff0c;并使用Attention提取全局上下文信息。 论文地址&#xff1a…

蔚来打败“蔚来”

作者 | 魏启扬 来源 | 洞见新研社 继2019年后&#xff0c;又一次深陷倒闭传闻的蔚来汽车&#xff0c;“在关键时刻找到钱了”。 12月18日&#xff0c;蔚来汽车宣布&#xff0c;与阿布扎比投资机构CYVN Holdings签订新一轮股份认购协议&#xff0c;CYVN Holdings将通过其附属公…

四色问题(图论)python

四色问题是一种著名的图论问题&#xff0c;它要求在给定的地图上给每个区域着一种颜色&#xff0c;使得相邻的区域颜色不同&#xff0c;而只使用四种颜色。这个问题可以通过图的着色来解决&#xff0c;其中图的节点表示区域&#xff0c;边表示相邻的关系。 在 Python 中&#…

excel导出,post还是get请求?

1&#xff0c;前提 今天在解决excel导出的bug时&#xff0c;因为导出接口查询参数较多&#xff0c;所以把原来的get请求接口修改为post请求 原代码&#xff1a; 修改后&#xff1a; 2&#xff0c;修改后 postman请求正常&#xff0c;然后让前端对接口进行同步修改&#xff0…

Clion自定义管理和配置软件构建过程的工具(代替CMake)构建程序

在公司由于需要x86环境和其他arm环境&#xff0c;同时需要使用公司自定义的mine_x86或者mine_orin对代码进行编译。 编译命令如下mine_x86 build -Dlocal1 -j8,为使用Clion对程序进行调试&#xff0c;需要对程序进行设置。方便调试代码时能够断点查看变量。尝试了很多次&#…

@WebMethod 这个注解的作用

WebMethod 注解是 Java 中 JAX-WS&#xff08;Java API for XML Web Services&#xff09;的一部分&#xff0c;用于将一个特定的方法标记为 Web 服务操作。当你在类方法上使用 WebMethod 注解时&#xff0c;这表明该方法是一个对外暴露的 Web 服务方法&#xff0c;即这个方法可…

pytorch实现DCP暗通道先验去雾算法及其onnx导出

pytorch实现DCP暗通道先验去雾算法及其onnx导出 简介实现ONNX导出导出测试 简介 最近在做图像去雾&#xff0c;于是在Pytorch上复现了一下dcp算法。暗通道先验去雾算法是大神何恺明2009年发表在CVPR上的一篇论文&#xff0c;还获得了当年的CVPR最佳论文。 实现 具体原理就不…

计算机组成原理综合1

1、完整的计算机系统应包括______。D A. 运算器、存储器和控制器 B. 外部设备和主机 C. 主机和实用程序 D. 配套的硬件设备和软件系统 2、计算机系统中的存储器系统是指______。D A. RAM存储器 B. ROM存储器 C. 主存储器 …

安捷伦Agilent 34970A数据采集

易学易用 从34972A简化的配置到内置的图形Web界面&#xff0c;我们都投入了非常多的时间和精力&#xff0c;以帮助您节约宝贵的时间。一些非常简单的东西,例如模块上螺旋型端子连接器内置热电偶参考结、包括众多实例和提示的完整用户文档&#xff0c;以及使您能够在开机数分钟后…

接口测试和测试用例分析

只要有软件产品的公司百分之九十以上都会做接口测试&#xff0c;要做接口测试的公司那是少不了接口测试工程师的&#xff0c;接口测试工程师相对于其他的职位又比较轻松并且容易胜任。如果你想从事接口测试的工作那就少不了对接口进行分析&#xff0c;同时也会对测试用例进行研…

node.js mongoose middleware

目录 官方文档 简介 定义模型 注册中间件 创建doc实例&#xff0c;并进行增删改查 方法名和注册的中间件名相匹配 执行结果 分析 错误处理中间件 手动抛出错误 注意点 官方文档 Mongoose v8.0.3: Middleware 简介 在mongoose中&#xff0c;中间件是一种允许在执…