数据清洗(ETL)
ETL:是Extract-Transform-Load
的缩写,用来描述将数据从来源端经过 抽取(Extract)、转换(Transform)、加载(Load) 至目的端的过程。
ETL较常用于数据仓库,但其对象并不限于数据仓库。
在运行核心业务MapReduce之前,往往需要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行Mapper
程序,而不需要运行Reducer
程序。
例如,我们需要对文本文件中,过滤掉字段数量不足的数据行。
可以在Mapper
中获取一行数据,split
切割后判断字段数量是否满足要求,不满足要求就不再交给context
。
因为这些步骤都在Mapper
中,所以我们可以设置ReduceTask数量为0。
常见的匹配规则:
- 匹配中文:
[\u4e00-\u9fa5]
- 英文字母:
[a-zA-Z]
- 数字:
[0-9]
- 匹配中文、英文、数字、下划线:
^[\u4e00-\u9fa5_a-zA-Z0-9]+$
- 匹配中文、英文、数字、下划线,同时匹配长度:
^[\u4e00-\u9fa5_a-zA-Z0-9]{4,10}
- 不能以下划线开头:
(?!_)
- 不能以下划线结尾:
(?!.?_$)
- 至少一个汉字、数字、字母、下划线:
[a-zA-Z0-9_\u4e00-\u9fa5]+
- 只含有汉字、数字、字母、下划线,且不限制下划线位置:
^[a-zA-Z_\u4e00-\u9fa5]
- 由数字、字母、下划线组成:
^\w+$
- 最长不超过7个汉字,或者14个字节:
^[\u4e00-\u9fa5]{1,7}$|^[\dA-Aa-z_]{1,14}$
- 匹配双字节字符(包括汉字),可以用来计算字符串长度:
[^x00-xff]
- 匹配空白行:
ns*r
- 匹配首尾空白字符(空格、制表符、换页符等):
^s*|s*$
String str = ""; // 要判断的字符串
String reg = ""; // 正则表达式
if(str.matches(reg)) {
// .....
}