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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM