大数据开发面试题及答案-数据仓库篇

关于数据清洗工作的理解(包括数据清洗是做什么的,为什么要进行数据清洗工作,什么样的数据叫脏数据,脏数据如何进行数据的处理)

数据清洗(Data cleaning)– 对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。

数据清洗从名字上也看的出就是把”脏”的”洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。因为数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来而且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误的或有冲突的数据显然是我们不想要的,称为”脏数据”。我们要按照一定的规则把”脏数据””洗掉”,这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。

主要类型
残缺数据
这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。

错误数据
这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。

重复数据
对于这一类数据–特别是维表中会出现这种情况–将重复数据记录的所有字段导出来,让客户确认并整理。

数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。

以上是百度百科的答案,以下才是我的理解。

总之:

数据清洗ETL是指对过来的数据进行处理成干净的数据。

主要的步骤有以下几个:

首先是需要接收数据

然后还有可能涉及到数据格式的转换,logstash是将结构化的数据转换成json格式的数据的一种方式

另外如果是进行离线数据处理的话还需要存储过来的脏数据,脏数据一般是存储在HDFS上的。离线一般使用MapReduce进行数据的清洗工作

如果是流式处理框架的话需要接收数据,去进行处理的。我们一般在流式处理框架中是使用kafka进行数据的接收,然后用sparkstreaming充当消费者进行数据的处理的。同时在这个sparkstreaming中进行数据清洗工作。

数据清洗之后就是干净的数据了,需要进行存储,由于数据的量比较大,因此又需要进行存储,一般会选择hdfs进行数据的存储处理。

之后数据就算是入库了,需要进行分析或者进行可视化或者进行AI模型训练等。

这就是数据处理过程的大概流程。

其中数据清洗阶段需要做的工作就是将这些脏数据进行处理,弄成干净的数据。具体怎么做呢?那么何为脏数据呢?

脏数据包括:

1、重复数据

2、残缺不全的数据,也就是数据中有一部分段或者该字段的一部分丢失了

3、错误数据,就是某一些字段或者一些字段对应的值明显是错误的。

那么针对于这些值应该怎么处理呢?

不同的数据,用途不同,处理的方式也是不一样的。一般的处理方式式删除掉,过滤掉,就是下一次存入数据库的时候不进行存车这些数据;还有就是将残缺的数据进行补齐,当然在补齐的时候是需要有一定的规则的,常见的方式式进行对这个值及其前后值去请均值;

如果是重复数据的话,那么使用distinct进行去重;

如果是不太全的数据,后期还需要进行做机器学习模型训练,那么就需要非常大量的数据,而当数据量又不太大的时候需要进行处理加工的,常见的方式就是进行前后值取平均值、和它前边的数据保持一致,和后边的数据进项保持一致等。

如果是错误数据是需要进行纠正错误的,比如将错误的值进行纠正等。

如果数据只是单纯的进行可视化,那么就是不让数据在前端展示就好了,这个时候错误数据处理的方式就有以下几种:

一个是在接口去库里进行查询的时候,做个判断,如果是不符合要求的数据,那么就不要查询这个字段的数据,这个是最后的最笨的办法,其实还有比较聪明的办法,就是在数据第二次入库之前,进行etl数据清洗,将脏数据处理就好了。这个就是ETL做的工作了。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注