准备

LKh7zAJ4nwo  TheReceptionist 653 Entertainment   424 13021   4.34    1305    744 DjdA-5oKYFQ NxTDlnOuybo c-8VuICzXtU DH56yrIO5nI W1Uo5DQTtzc E-3zXq_r4w0 1TCeoRPg5dE yAr26YhuYNY 2ZgXx72XmoE -7ClGo-YgZ0 vmdPOOd6cxI KRHfMQqSHpk pIMpORZthYw 1tUDzOp10pk heqocRij5P0 _XIuvoH6rUg LGVU5DsezE0 uO2kj6_D8B4 xiDqywcDQRM uX81lMev6_o

这是一行我们准备清洗的数据,它的每个数据的意思是(依次)
视频唯一id 视频上传者 视频年龄 视频类别 视频长度 观看次数 视频评分 流量 评论数 相关视频id
要注意的是:

  1. 视频类别:可能有多个分类,中间要以&分割,但是在有的数据中会以如下形式显示
People & Blogs   & 中间有空格,我们要处理掉它
  1. 相关电影id是以tab(" \t ")分割的,我们要将他换为空格
  2. 有的电影没有相关电影,我们要将这些数据过滤掉

了解需求后,我们开始做!

环境

IDEA + Maven +hadoop

相关依赖

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.2</version></dependency></dependencies>

代码

Mapper代码

public class ETLMapper extends Mapper<LongWritable,Text,Text,NullWritable> {Text k=new Text();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//获取一行String s = value.toString();//数据清理String s1 = ETLUtil.FormatString(s);//传递数据if(s1==null) return;k.set(s1);context.write(k,NullWritable.get());}
}

ETL工具类:

package util;public class ETLUtil {public static String FormatString(String s){//切割数据String[] split = s.split("\t");//过滤脏数据if(split.length<9){return null;}//数据替换split[3]=split[3].replace(" ","");//将空格去掉StringBuilder sb=new StringBuilder();//类型拼接for(int i=0;i<split.length;i++){if(i<9){if(i==split.length-1){sb.append(split[i]);}else{sb.append(split[i]+"\t");}}else {if(i==split.length-1){sb.append(split[i]);}else{sb.append(split[i]+"&");}}}return sb.toString();}}

驱动类 :

package etl;import org.apache.hadoop.conf.Configuration;
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.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;public class ETLDriver implements Tool {private Configuration configuration;public int run(String[] strings) throws Exception {//创建JobJob job = Job.getInstance(configuration);//设置运行环境job.setJarByClass(ETLDriver.class);//设置对应的MapperReduce类job.setMapperClass(ETLMapper.class);//设置Mapper输出的job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(NullWritable.class);//设置全局的输出job.setOutputKeyClass(Text.class);job.setOutputValueClass(NullWritable.class);//设置输出输入路径FileInputFormat.setInputPaths(job,new Path(strings[0]));FileOutputFormat.setOutputPath(job,new Path(strings[1]));//不需要reducejob.setNumReduceTasks(0);//提交job.submit();return 1;}public void setConf(Configuration configuration) {this.configuration=configuration;}public Configuration getConf() {return configuration;}//主函数public static void main(String[] args) throws Exception{ToolRunner.run(new ETLDriver(),args);}
}

测试运行

我们在windows上测试运行了代码,按照要求完成了相应的任务

取一条数据看看

Gnbls__5gdo  ggagnisevidal   699 People&Blogs    132 15  0   0   0   FDz8KaArjOA&O1F8tm0kY44&zq_NPp6-zUY&EvtlRc_G9DA&gL5aFyBlucE&1pGjSJD35AU&QGkOy0_uoOM&NbjQ-lTYgvo&_62f9_ylrjg&SX1FY9pxrhw&ITeraiadbJA&ZZZADbubu0Y&4JhAswOQV1Y&mLeOiDF99Yo&BrdO9GagGoM&gij1PytzQNg&wkvCDCOGzGc&5pdG8PZjVog&l8k-5CA2PKY&_iCmluYaOyI

很nice!

打包,放到集群上使用


双击

jar就在这

Hadoop实现数据清洗ETL相关推荐

  1. Hadoop数据压缩 与 数据清洗ETL

    目录 一.压缩概述 优缺点 原则 二.MR 支持的压缩编码 三.压缩方式选择 Gzip压缩 Bzip2 压缩 Lzo压缩 Snappy压缩 压缩位置选择 四.压缩参数配置 五.压缩案例 六.数据清洗E ...

  2. Hadoop之数据清洗

    Hadoop之数据清洗 数据清洗(ETL) ​ 在运行核心业务MapReduce程序之前,往往需要先对数据进行清洗,清 理掉不符合用户要求的数据,清理的过程往往只需要运行Mapper程序,不 需要运行 ...

  3. Kettle构建Hadoop ETL实践(六):数据转换与装载

    目录 一.数据清洗 1. 处理"脏数据" 2. 数据清洗原则 3.    数据清洗实例 (1)身份证号码格式检查 (2)去除重复数据 (3)建立标准数据对照表 二.Hive简介 1 ...

  4. (超详细)大数据Hadoop之MapReduce组件

    一.MapReduce 简介 1.1 MapReduce的概述 在Hadoop生态圈中,MapReduce属于核心,负责进行分布式计算. MapReduce 核心功能是将用户编写的业务逻辑代码和自带默 ...

  5. MapReduce总结 + 相关Hadoop权威指南读书笔记(未完......欢迎补充,互相学习)

    文章目录 MapReduce概述 MapReduce优缺点 MapReduce核心思想 MapReduce进程 MapReduce编程规范 WordCount 案例实操 本地测试 集群测试 Hadoo ...

  6. 七、Hadoop简明笔记

    目录 1.Hadoop入门 1.1 Hadoop优势 1.2 Hadoop1.x.Hadoop2.x.Hadoop3.x的区别 1.3 HDFS架构概述 1.4 YARN架构概述 1.5 MapRed ...

  7. Hadoop详细教程

    1.Hadoop入门 版本信息:hadoop-3.1.0 1.1集群配置 NameNode 和 SecondaryNameNode 不要装在同一台服务器 ResourceManager也很耗内存不要和 ...

  8. Hadoop:MapReduce应用

    文章目录 一.Join多种应用 1.1 Reduce Join 1.2 Map Join 二.计数器应用 三.数据清洗(ETL) 四.MapReduce开发总结 一.Join多种应用 1.1 Redu ...

  9. 中国移动集中化BI探索:数据仓库与Hadoop混搭

    随着移动互联网.物联网/传感器等技术的发展,全球数据生产速度正在高速增长,信息已成为企业的战略资产.而运营商作为网络时代的数据交换中心,其网络管道.业务平台.支撑系统中每天都在产生大量有价值的数据,基 ...

最新文章

  1. 男人最不该做的7件事
  2. 不正确的c语言语句是,最基本的C语言语句是( )
  3. 页面重新跳转到父类url
  4. Linux开启动过程详解
  5. hdu 5903 Square Distance
  6. 能源结构进入变革时代 光伏业趋于壮大转型
  7. Ubuntu系统的安装
  8. 关于开发系统后门软件的几点思路
  9. JQuery快速入门-选择器
  10. python import _ssl_Python 3没有名为’_ssl’的模块
  11. python如何读取txt数据库_详解Python如何读取MySQL数据库表数据
  12. Java带有效期的Map
  13. Word 紧贴表格之后添加新行
  14. 2019支付宝小程序技术专场招募
  15. 元宇宙火了,智能家居跟不跟?
  16. 技术入股创业一年,家庭收入变成负5万
  17. 对于气缸型号表示的内容与与含义说明
  18. python re.compile() 详解——Python正则表达式
  19. jquery 如何使用innerHTML
  20. android中如何保存对象集合中,如何序列化对象并将其保存到Android中的文件?

热门文章

  1. 0基础快速入门Python,小白必看
  2. Https请求报错:unable to find valid certification path to requested target
  3. 十二指肠溃疡患者秋天如何调养
  4. Oracle开发者中级第7课(层级查询)实验
  5. 算法岗的招聘现状与未来
  6. 【笔记】微信开发者工具自定义编译模式(编译时,携带 指定参数 直接跳转 指定页面)
  7. python学习笔记之word文档提取
  8. java.nio.file.NoSuchFileException异常解决
  9. 成都建博会:家居行业数字营销金点子 句句戳心坎,先收藏
  10. (附源码)ssm学校疫情服务平台 毕业设计 291202