一. 对文件merge.csv进行完全去重
1.数据准备
合并后的用户名单存放在CSV文件merge.csv中,如下图所示:
2.打开kettle工具,新建转换
使用kettle工具创建转换repeat_transform,并添加“CSV文件输入”控件、“唯一行(哈希值)”控件以及Hop跳连接线,如下图所示:
3.配置“csv文件输入”控件
(1)双击“CSV文件输入”控件,进入“CSV文件输入”界面,单击“浏览”按钮,选择要进行完全去重处理的CSV文件merge.csv,如下图所示:
(2)单击“获取字段”按钮,kettle会自动检索CSV文件,并对文件中的字段类型、格式、长度、精度等属性进行分析,如下图所示:
(3)单击“预览”按钮,查看CSV文件merge.csv的数据是否加载到CSV文件输入流中,如下图所示:
从图中可以看出,CSV文件merge.csv的数据已经成功抽取到CSV文件输入流中,单击“关闭”->“确定”按钮,完成“CSV文件输入”控件的配置。
4.配置“唯一行(哈希值)”控件
(1)双击“唯一行(哈希值)”控件,进入“唯一行(哈希值)”界面,在“用来比较字段”处添加要去重的字段,这里可以单击“获取”按钮,添加需要去重的字段,如下图所示:
(2)单击“确定”按钮,完成“唯一行(哈希值)”控件的配置。
5.运行转换repeat_transform
(1)单击转换工作区顶部的运行按钮,运行创建的转换repeat_transform,实现消除CSV文件merge.csv中完全重复的数据,如下图所示:
(2)从图中执行结果窗口的“步骤度量”选项卡可以看出,“CSV文件输入”控件输入10条数据并写入该控件9条数据(其中有一条数据为表头);“唯一行(哈希值)”控件从“CSV文件输入”控件读取9条数据,这里本来写入该控件应该为7条数据,拒绝2条数据(这2条数据为完全重复数据)。也就是说,CSV文件merge.csv中有 2条数据与其他数据完全重复。选中其中的“唯一行(哈希值)”控件,单击执行结果窗口的Preview data选项卡,查看是否消除CSV文件merge.csv中完全重复的数据,如下图所示:
结果显示,并没有去除重复数据,也不知道问题出在了什么地方???我也不知道是什么原因。
二.对文件people_survey.txt中的缺失值进行填充
1.打开kettle工具,创建转换
使用kettle工具创建转换fill_missing_value,并添加“文本文件输入”控件、“过滤记录”控件、“空操作(什么也不做)”控件、“替换NULL值”控件、“合并记录”控件、“字段选择”控件以及Hop跳连接线,如下图所示:
2.配置“文本文件输入”控件
(1)双击“文本文件输入”控件,进入“文本文件输入”界面,单击“浏览”按钮,选择要填充缺失值的文件people_survey.txt,如下图所示:
(2)单击“增加”按钮,将要填充缺失值的文件people_survey.txt添加到“文本文件输入”控件中,如下图所示:
(3)单击“内容”选项卡,切换到“内容”选项卡界面,清除分隔符处的默认分隔符“;”,单击Insert TAB按钮,在分隔符处插入一个制表符;取消勾选“头部”复选框,若不取消,则在进行数据抽取操作时会排除文件第一行的数据。“内容”选项卡的配置如下图所示:
(4)单击“字段”选项卡,切换到“字段”选项卡界面,根据文件people_survey.txt的内容添加对应的字段名称,并指定数据类型。需要注意的是,制表符可看作是由多个空格组成,因此在“去除空字符串方式”列时,所添加的字段都应选择“不去掉空格”,否则在抽取数据操作时会把制表符当作空格去除,而不能把制表符作为分隔符实现文本文件内容的分割,如下图所示:
(5)单击“预览记录”按钮,查看文件people_survey.txt的数据是否成功抽取到文本文件输入流中,如下图所示:
(6)从上图中可以看出,文件按people_survey.txt的数据已成功抽取到文本文件输入流中,单击“关闭”->“确定”按钮,完成“文本文件输入”控件的配置。
(7)将字段workclass同为Private值的字段hours_per_week值相加求均值,并用该均值对字段userid中值为000016的hours_per_week字段存在的缺失值进行填充。
3.配置“过滤记录”控件
(1)双击“过滤记录”控件,进入“过滤记录”界面,在“条件”处设置过滤的条件,由于从上步骤图中可以看出字段userid为000016用户的hours_per_week(即每周工作时间字段)存在缺失值,而它的workclass字段值为Private,因此可以将过滤字段设置为workclass,过滤值设置为Private作为过滤条件,如下图所示:
(2)在“发送true数据给步骤:”下拉列表中选择“空操作(什么也不做)”,将workclass字段值为Private的数据放在“空操作”控件中;在“发送false数据给步骤:”后的下拉列表中选择“空操作(什么也不做)2”,将workclass字段值不为Private的数据放在“空操作(什么也不做)2”控件中,再单击“确定”按钮,完成“过滤记录”控件的配置,如下图所示:
4.配置“替换NULL值”控件
双击“替换NULL值”控件,进入“替换NULL值”界面,勾选“选择字段”复选框,并在“字段”框添加字段hours_per_week,值替换为44(44是字段为hours_per_week中所有值相加求的均值,这里指用44替换字段hours_per_week中的NULL值),单击“确定”按钮,完成“替换NULL值”控件的配置,如下图所示:
5.配置“合并记录”控件
(1)双击“合并记录”控件,进入“合并行(比较)”界面,在“旧数据源:”后的下拉列表中选择“替换NULL值”,在“新数据源:”后的下拉列表中选择“空操作(什么也不做)2”;在“匹配的关键字:”部分添加关键字段,即userid,如下图所示:
(2)“合并记录”控件主要是将两个数据源(旧数据、新数据源)进行合并,标志字段主要是将每条数据进行标记,新数据源的数据会标记为new,旧数据源的数据会标记为deleted,若新、旧数据源中存在相同的关键字段设置的数据,则两个数据源进行合并后,只会保存从新数据源中获取的数据,并以identical进行标记,单击“确定”按钮,完成“合并记录”控件的配置。
6.配置“替换NULL值2”控件
双击“替换NULL值2”控件,进入“替换NULL值”界面,勾选“选择字段”复选框,并在“字段”框添加字段为workclass,值替换为Private(这里用Private替换字段workclass中的NULL值),单击“确定”按钮,完成“替换NULL值2”控件的配置,如下图所示:
7.配置“字段选择”控件
双击“字段选择”控件,进入“选择/改名值”界面,在“移除”选项卡界面中添加要移除的字段名称,这里移除的是字段flagfield,单击“确定”按钮,完成“字段选择”控件的配置,如下图所示:
8.运行转换fill_missing_vallue
(1)单击转换工作区顶部的运行按钮,运行创建的转换fill_missing_value,实现填充文件people_survey.txt中的缺失值,如下图所示:
(2)从上图中执行结果窗口的“步骤度量”选项卡可以看出,“文本文件输入”控件输入21条数据并写入该控件;“过滤记录”控件读取“文本文件输入”控件中的21条数据并写入该控件;“空操作(什么也不做)”控件读取符合过滤要求的15条数据并写入该控件;“空操作(什么也不做)2”控件读取不符合过滤要求的6条数据并写入该控件;“替换NULL值”控件读取“空操作”控件中的15条数据进行空值替换操作并写入该控件;“合并记录”控件读取“替换NULL值”控件和“空操作(什么也不做)2”控件共21条数据并写入该控件;“替换NULL值2”控件读取“合并记录”中的21条数据进行空值替换操作并写入该控件;“字段选择”控件读取“替换NULL值2”控件中的21条数据并写入该控件。单击“字段选择”控件,再单击执行结果窗口的Preview data选项卡,查看是否填充了文件people_survey.txt中的缺失值,如下图所示:
从图中可以看出,文件people_survey.txt中不存在缺失值数据了,说明通过kettle工具实现了缺失值的填充。