hive案例:hive对房产数据进行过滤

数据:

天通苑北一区 3室2厅 510万 1.01101E+11 天通苑北一区 3-2厅 143.09 平米 南北 简装 有电梯 35642 510
旗胜家园 2室1厅 385万 1.01101E+11 旗胜家园 2-1厅 88.68 平米 南北 简装 有电梯 43415 385
天秀花园澄秀园 3室1厅 880万 1.01101E+11 天秀花园澄秀园 3-1厅 148.97 平米 东南北 精装 无电梯 59073 880
西南向的两居室 高楼层电梯房 满五年 1.01101E+11 月季园 2-1厅 101.83 平米 南西 简装 有电梯 55878 569
望京新城 3室2厅 850万 1.01101E+11 望京新城 3-2厅 142.93 平米 东南 精装 有电梯 59470 850
翠屏北里西区 4室2厅 670万 1.01101E+11 翠屏北里西区 4-2厅 186.26 平米 南北 简装 无电梯 35972 670
丽水嘉园 3室2厅 1000万 1.01101E+11 丽水嘉园 3-2厅 127.06 平米 西北 精装 有电梯 78703 1000
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
佰嘉城 3室2厅 478万 1.01101E+11 佰嘉城 3-2厅 121.63 平米 南北 简装 有电梯 39300 478
模式口中里 2室1厅 290万 1.01101E+11 模式口中里 2-1厅 67.39 平米 东西 毛坯 无电梯 43034 290
金星小区 2室1厅 290万 1.01101E+11 金星小区 2-1厅 53.31 平米 南北 简装 无电梯 54399 290
机械研究院西区 南北三居室 此户型少出 看房方便 1.01101E+11 机械研究院西区 3-2厅 98.44 平米 南北 简装 无电梯 96506 950
机械研究院西区 南北三居室 此户型少出 看房方便 1.01101E+11 机械研究院西区 3-2厅 98.44 平米 南北 简装 无电梯 96506 950
南北通透 三居室 高楼层 视野很好 1.01101E+11 太阳园 3-1厅 139.63 平米 南北 简装 有电梯 103846 1450
天通西苑二区 2室1厅 390万 1.01101E+11 天通西苑二区 2-1厅 97.12 平米 西 精装 有电梯 40157 390
西黄新村北里 2室1厅 436万 1.01101E+11 西黄新村北里 2-1厅 92.06 平米 西南 精装 有电梯 47361 436
翠微小学 板楼南北三居 中间楼层采光好 好户型无浪费 1.01101E+11 翠微路16号院 3-1厅 83.7 平米 南北 毛坯 无电梯 93190 780
天通西苑二区 2室1厅 390万 1.01101E+11 天通西苑二区 2-1厅 97.12 平米 西 精装 有电梯 40157 390
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
天通苑北一区 3室2厅 510万 1.01101E+11 天通苑北一区 3-2厅 143.09 平米 南北 简装 有电梯 35642 510
旗胜家园 2室1厅 385万 1.01101E+11 旗胜家园 2-1厅 88.68 平米 南北 简装 有电梯 43415 385
天秀花园澄秀园 3室1厅 880万 1.01101E+11 天秀花园澄秀园 3-1厅 148.97 平米 东南北 精装 无电梯 59073 880
西南向的两居室 高楼层电梯房 满五年 1.01101E+11 月季园 2-1厅 101.83 平米 南西 简装 有电梯 55878 569
望京新城 3室2厅 850万 1.01101E+11 望京新城 3-2厅 142.93 平米 东南 精装 有电梯 59470 850
翠屏北里西区 4室2厅 670万 1.01101E+11 翠屏北里西区 4-2厅 186.26 平米 南北 简装 无电梯 35972 670
丽水嘉园 3室2厅 1000万 1.01101E+11 丽水嘉园 3-2厅 127.06 平米 西北 精装 有电梯 78703 1000
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
佰嘉城 3室2厅 478万 1.01101E+11 佰嘉城 3-2厅 121.63 平米 南北 简装 有电梯 39300 478
模式口中里 2室1厅 290万 1.01101E+11 模式口中里 2-1厅 67.39 平米 东西 毛坯 无电梯 43034 290
金星小区 2室1厅 290万 1.01101E+11 金星小区 2-1厅 53.31 平米 南北 简装 无电梯 54399 290
机械研究院西区 南北三居室 此户型少出 看房方便 1.01101E+11 机械研究院西区 3-2厅 98.44 平米 南北 简装 无电梯 96506 950
机械研究院西区 南北三居室 此户型少出 看房方便 1.01101E+11 机械研究院西区 3-2厅 98.44 平米 南北 简装 无电梯 96506 950
南北通透 三居室 高楼层 视野很好 1.01101E+11 太阳园 3-1厅 139.63 平米 南北 简装 有电梯 103846 1450
天通西苑二区 2室1厅 390万 1.01101E+11 天通西苑二区 2-1厅 97.12 平米 西 精装 有电梯 40157 390
西黄新村北里 2室1厅 436万 1.01101E+11 西黄新村北里 2-1厅 92.06 平米 西南 精装 有电梯 47361 436
翠微小学 板楼南北三居 中间楼层采光好 好户型无浪费 1.01101E+11 翠微路16号院 3-1厅 83.7 平米 南北 毛坯 无电梯 93190 780
天通西苑二区 2室1厅 390万 1.01101E+11 天通西苑二区 2-1厅 97.12 平米 西 精装 有电梯 40157 390
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
天通苑北一区 3室2厅 510万 1.01101E+11 天通苑北一区 3-2厅 143.09 平米 南北 简装 有电梯 35642 510
旗胜家园 2室1厅 385万 1.01101E+11 旗胜家园 2-1厅 88.68 平米 南北 简装 有电梯 43415 385
天秀花园澄秀园 3室1厅 880万 1.01101E+11 天秀花园澄秀园 3-1厅 148.97 平米 东南北 精装 无电梯 59073 880
西南向的两居室 高楼层电梯房 满五年 1.01101E+11 月季园 2-1厅 101.83 平米 南西 简装 有电梯 55878 569
望京新城 3室2厅 850万 1.01101E+11 望京新城 3-2厅 142.93 平米 东南 精装 有电梯 59470 850
翠屏北里西区 4室2厅 670万 1.01101E+11 翠屏北里西区 4-2厅 186.26 平米 南北 简装 无电梯 35972 670
丽水嘉园 3室2厅 1000万 1.01101E+11 丽水嘉园 3-2厅 127.06 平米 西北 精装 有电梯 78703 1000
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
佰嘉城 3室2厅 478万 1.01101E+11 佰嘉城 3-2厅 121.63 平米 南北 简装 有电梯 39300 478
模式口中里 2室1厅 290万 1.01101E+11 模式口中里 2-1厅 67.39 平米 东西 毛坯 无电梯 43034 290
金星小区 2室1厅 290万 1.01101E+11 金星小区 2-1厅 53.31 平米 南北 简装 无电梯 54399 290
机械研究院西区 南北三居室 此户型少出 看房方便 1.01101E+11 机械研究院西区 3-2厅 98.44 平米 南北 简装 无电梯 96506 950
机械研究院西区 南北三居室 此户型少出 看房方便 1.01101E+11 机械研究院西区 3-2厅 98.44 平米 南北 简装 无电梯 96506 950
南北通透 三居室 高楼层 视野很好 1.01101E+11 太阳园 3-1厅 139.63 平米 南北 简装 有电梯 103846 1450
天通西苑二区 2室1厅 390万 1.01101E+11 天通西苑二区 2-1厅 97.12 平米 西 精装 有电梯 40157 390
西黄新村北里 2室1厅 436万 1.01101E+11 西黄新村北里 2-1厅 92.06 平米 西南 精装 有电梯 47361 436
翠微小学 板楼南北三居 中间楼层采光好 好户型无浪费 1.01101E+11 翠微路16号院 3-1厅 83.7 平米 南北 毛坯 无电梯 93190 780
天通西苑二区 2室1厅 390万 1.01101E+11 天通西苑二区 2-1厅 97.12 平米 西 精装 有电梯 40157 390
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
天通苑北一区 3室2厅 510万 1.01101E+11 天通苑北一区 3-2厅 143.09 平米 南北 简装 有电梯 35642 510
旗胜家园 2室1厅 385万 1.01101E+11 旗胜家园 2-1厅 88.68 平米 南北 简装 有电梯 43415 385
天秀花园澄秀园 3室1厅 880万 1.01101E+11 天秀花园澄秀园 3-1厅 148.97 平米 东南北 精装 无电梯 59073 880
西南向的两居室 高楼层电梯房 满五年 1.01101E+11 月季园 2-1厅 101.83 平米 南西 简装 有电梯 55878 569
望京新城 3室2厅 850万 1.01101E+11 望京新城 3-2厅 142.93 平米 东南 精装 有电梯 59470 850
翠屏北里西区 4室2厅 670万 1.01101E+11 翠屏北里西区 4-2厅 186.26 平米 南北 简装 无电梯 35972 670
丽水嘉园 3室2厅 1000万 1.01101E+11 丽水嘉园 3-2厅 127.06 平米 西北 精装 有电梯 78703 1000
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
佰嘉城 3室2厅 478万 1.01101E+11 佰嘉城 3-2厅 121.63 平米 南北 简装 有电梯 39300 478
模式口中里 2室1厅 290万 1.01101E+11 模式口中里 2-1厅 67.39 平米 东西 毛坯 无电梯 43034 290
金星小区 2室1厅 290万 1.01101E+11 金星小区 2-1厅 53.31 平米 南北 简装 无电梯 54399 290
机械研究院西区 南北三居室 此户型少出 看房方便 1.01101E+11 机械研究院西区 3-2厅 98.44 平米 南北 简装 无电梯 96506 950
机械研究院西区 南北三居室 此户型少出 看房方便 1.01101E+11 机械研究院西区 3-2厅 98.44 平米 南北 简装 无电梯 96506 950
南北通透 三居室 高楼层 视野很好 1.01101E+11 太阳园 3-1厅 139.63 平米 南北 简装 有电梯 103846 1450
天通西苑二区 2室1厅 390万 1.01101E+11 天通西苑二区 2-1厅 97.12 平米 西 精装 有电梯 40157 390
西黄新村北里 2室1厅 436万 1.01101E+11 西黄新村北里 2-1厅 92.06 平米 西南 精装 有电梯 47361 436
翠微小学 板楼南北三居 中间楼层采光好 好户型无浪费 1.01101E+11 翠微路16号院 3-1厅 83.7 平米 南北 毛坯 无电梯 93190 780
天通西苑二区 2室1厅 390万 1.01101E+11 天通西苑二区 2-1厅 97.12 平米 西 精装 有电梯 40157 390
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800
绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年 1.01101E+11 绿荫芳邻 2-2厅 133.76 平米 南北 精装 有电梯 59809 800

 

要求:

某房地产元数据清洗。清洗规则如下:(列数从第0列开始)
1、首先统计整条房屋信息发布次数
2、过滤,整行数据完全相同的只留一行即可。
3、第1列数据某些字段需要加"[]"(自己结合分析前后观察规律)。
4、第2列数据不需要。
5、将第4列中的"-"替换成"室"。
6、将第5列数据中的空格去掉。
7、将6、7、8列改成如下格式。
8、将10列数据中值小于300的排除掉整行数据,并将剩下的第10列数据后面加上单位"万"。(15分)
9、清洗完后的第1列和第2列用Tab键分隔,第2、3、4、5、6、7列分别用空格分隔。
10、全部按规则输出,并且输出文件中第一行是抬头。

房名 区域 户型 面积 朝向-装修-电梯 单价 总价 发布次数

结果样式:

hive思路:

天通苑北一区 3室2厅 510万 1.01101E+11 天通苑北一区 3-2厅 143.09 平米 南北 简装 有电梯 35642 510
实际开发中拿到的字段都是整行的,设置一个字段
create external table if not exists data(
logs String
)
//row format delimited fields terminated by '\t' ,不用拆分,只有一个字段,设置文件所在位置即可。
//stored as textfile;

create external table if not exists data(
logs String
)
location '/house';

hadoop fs -mkdir /house;

使用字符串,table键,空格时需要使用双引号,内置函数里使用单引号
拆分后的
第一列 天通苑北一区 3室2厅 510万
按'\t'拆分,使用split函数,第一列为拆分后的第0个角标元素
split(logs,"\t")[0]

split(logs,'\t')[0]
第一列以空格拆分,拆分成三个元素 天通苑北一区 3室2厅 510万
第一个元素
split(split(logs,"\t")[0],' ')[0]

split(split(logs,'\t')[0],' ')[0]
由于某些第一列拆分后只有一个元素 绿荫芳邻二居客厅朝南主卧室朝南小卧室朝北满五年
使用if函数进行判断,如果角标为1,2的元素为null,则赋值空字符串,否则是它本身
if(split(split(logs,"\t")[0],' ')[1] is null,"",split(split(logs,"\t")[0],' ')[1])

if(split(split(logs,'\t')[0],' ')[1] is null,"",split(split(logs,'\t')[0],' ')[1])
合并:将以空格拆分后的三个元素连接起来,使用concat函数
拆分后的第一列
select concat(split(split(logs,"\t")[0],' ')[0]," [",if(split(split(logs,"\t")[0],' ')[1] is null,"",split(split(logs,"\t")[0],' ')[1])," ",
if(split(split(logs,"\t")[0],' ')[2] is null,"",split(split(logs,"\t")[0],' ')[2]),"]\t") from data;

select concat(split(split(logs,"\t")[0],' ')[0]," [",if(split(split(logs,"\t")[0],' ')[1] is null,"",split(split(logs,"\t")[0],' ')[1])," ",
if(split(split(logs,"\t")[0],' ')[2] is null,"",split(split(logs,"\t")[0],' ')[2]),"]\t") from data;
第三列:天通苑北一区 ,以'\t'拆分得到,题目要求第二列与第三列之间以空格分隔,则在第二列后加空格
split(logs,'\t')[2]拆分后的第三列
select concat(split(logs,"\t")[2]," ") from data;

select concat(split(logs,'\t')[2],' ') from data;
第四列:3-2厅,将- 替换成室,使用regexp_replace正则替换函数,并在之后加空格,与下一列用空格分隔。
select concat(regexp_replace(split(logs,"\t")[3],"-","s")," ") from data;

regexp_replace(split(logs,'\t')[3],'-','室')
select concat(regexp_replace(split(logs,'\t')[3],'-','室'),' ') from data;
第五列:143.09 平米,去掉空格,使用regexp_replace正则替换函数,
select concat(regexp_replace(split(logs,"\t")[4]," ","")," ") from data;

regexp_replace(split(logs,'\t')[4],' ','');
在该列后加空格,使用concat连接函数
select concat(regexp_replace(split(logs,'\t')[4],' ',''),' ') from data;
第六列 南北 简装 有电梯,使用-连接,并在之后加空格
使用concat,不使用concat

select concat(split(logs,'\t')[5],'-',split(logs,'\t')[6],'-',split(logs,'\t')[7],'-',' ') from data;
第九列 35642
select concat(split(logs,"\t")[8],' ') from data;

select concat(split(logs,'\t')[8],' ') from data;
第10列 510 ,将10列数据中值小于300的排除掉整行数据,并将剩下的第10列数据后面加上单位"万"。
select concat(split(logs,"\t")[9],"wan ") from data where split(logs,"\t")[9]>=300;

select concat(split(logs,'\t')[9],'万',' ') from data where split(logs,'\t')[9]>300;

//设置表头命令:set hive.cli.print.header=true; //设置显示字段名

set hive.cli.print.current.db=true;设置显示使用的数据库
set hive.cli.print.header=true;设置显示字段名

select concat(split(split(logs,"\t")[0],' ')[0]," [",if(split(split(logs,"\t")[0],' ')[1] is null,"",split(split(logs,"\t")[0],' ')[1])," ",if(split(split(logs,"\t")[0],' ')[2] is null,"",split(split(logs,"\t")[0],' ')[2]),"]\t") as `房名`,
concat(split(logs,"\t")[2]," ") as `区域`,
concat(regexp_replace(split(logs,"\t")[3],"-","s")," ") as `户型`,
concat(regexp_replace(split(logs,"\t")[4]," ","")," ") as `面积`,
concat(concat_ws("-",split(logs,"\t")[5],split(logs,"\t")[6],split(logs,"\t")[7])," ") as `朝向-装修-电梯`,
concat(split(logs,"\t")[8]," ") as `单价`,
concat(split(logs,"\t")[9],"wan ") as `总价`,
from data where split(logs,"\t")[9]>300;
count(logs) as `发布次数`

select concat(split(logs,'\t')[0]," [",if((split(split(logs,'\t')[0]),' ')[1] is null,'',split((split(logs,'\t')[0]),' ')[1]),
if(split(split(logs,'\t')[0],' ')[2] is null,"",split(split(logs,'\t')[0],' ')[2]),"]\t") as '房名',
concat(split(logs,'\t')[2],' ') as '区域',
concat(regexp_replace(split(logs,'\t')[3],'-','室'),' ') as '户型',
concat(regexp_replace(split(logs,'\t')[4],' ',''),' ') as '面积',
concat(split(logs,'\t')[5],'-',split(logs,'\t')[6],'-',split(logs,'\t')[7],'-',' ') as '朝向-装修-电梯',
concat(split(logs,'\t')[8],' ') as '单价',
concat(split(logs,'\t')[9],'万',' ') as '总价',
count(*) as '发布次数' from data group by logs having split(logs,"\t")[9]>=300;


select concat(split(split(logs,"\t")[0],' ')[0]," [",if(split(split(logs,"\t")[0],' ')[1] is null,"",split(split(logs,"\t")[0],' ')[1])," ",if(split(split(logs,"\t")[0],' ')[2] is null,"",split(split(logs,"\t")[0],' ')[2]),"]\t") as `房名`,
concat(split(logs,"\t")[2]," ") as `区域`,
concat(regexp_replace(split(logs,"\t")[3],"-","s")," ") as `户型`,
concat(regexp_replace(split(logs,"\t")[4]," ","")," ") as `面积`,
concat(concat_ws("-",split(logs,"\t")[5],split(logs,"\t")[6],split(logs,"\t")[7])," ") as `朝向-装修-电梯`,
concat(split(logs,"\t")[8]," ") as `单价`,
concat(split(logs,"\t")[9],"wan ") as `总价`,
count(logs) as `发布次数`
from data group by logs having split(logs,"\t")[9]>=300;

 

posted @ 2018-05-22 23:35  瓶子xf  阅读(1987)  评论(0编辑  收藏  举报