数据及需求解析
数据
数据一示例
shouyue,430100,B190306162112070000,20190306162112,20190306162223,1,1,用户取消
companyid,address,orderid,ordertime,canceltime,operator,canceltypecode,cancelreason
1200DDCX3307,430104,17625076885092,20190307173227,20190307173833,2,5,null
1200DDCX3307,430406,17624999825776,20190306164901,20190306164947,1,4,null
1100YDYC423D,430602,6665578474529331090,20190307172846,20190307172909,1,1,第三方接口取消
3301YXKJ223E,430700,17146323201919,20190307083000,20190307073855,3,3,
1100YDYC423D,430602,6665578474529331090,20190307172846,20190307172909,1,1,第三方接口取消
3301YXKJ223E,430700,,20190307083000,20190307073855,3,3,
shouyue,430100,P190307171256186000,20190307171255,20190307171348,1,1,点击下单120S内没有筛选到司机时, 乘客手动点击取消订单
字段解析
companyid,address,orderid,ordertime,canceltime,operator,canceltypecode,cancelreason
数据二示例
340103,安徽省合肥市庐阳区
431027,湖南省郴州市桂东县
210302,辽宁省鞍山市铁东区
440605,广东省佛山市南海区
字段解析
行政区划代码,行政区
需求及解析
- 判断一行数据字段是否完整,本数据字段之间通过,分割,数据分割后长度为 8 ,如果分割后字符列表长度小于 8
或有不完整字段(字段值为空),则清洗掉这一行数据。 - 去重清洗:若有相同订单 id(orderid)只保留第一行,其他的清洗掉;
- 撤销理由(cancelreason)有大量的字符串 null,请将这些字符串用”未知”替代;
- 将数据集中的订单时间(ordertime)、订单撤销时间(canceltime)转换为 “yyyy-MM-dd
HH:mm:ss”格式,同时只保留订单时间(ordertime)和订单撤销时间(canceltime)在 2019 年 03 月 07
日的数据,其他日期或者不匹配的数据清洗掉(字段名数据); - 处理数据集中的行政区划代码(address),将其转换成对应的地区名称,在行政区划代码(address)字段后插入,若数据中行政区划代码在数据库没有找到对应的行政区名称,则将行政区名设置为“未知”;
代码实现
自定义数据类型
import org.apache.hadoop.io.WritableComparable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
public class Data implements WritableComparable<Data> {
private String companyid;
private String address;
private String orderid;
private String ordertime;
private String canceltime;
private String operator;
private String canceltypecode;
private String cancelreason;
@Override
public int compareTo(Data o) {
return 0;
}
@Override
public void write(DataOutput dataOutput) throws IOException {
dataOutput.writeUTF(companyid);
dataOutput.writeUTF(address);
dataOutput.writeUTF(orderid);
dataOutput.writeUTF(ordertime);
dataOutput.writeUTF(canceltime);
dataOutput.writeUTF(operator);
dataOutput.writeUTF(canceltypecode);
dataOutput.writeUTF(cancelreason);
}
@Override
public void readFields(DataInput dataInput) throws</