数据清洗(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$
    1. String str = ""; // 要判断的字符串
    2. String reg = ""; // 正则表达式
    3. if(str.matches(reg)) {
    4. // .....
    5. }