Serde - OpenCSVSerde
CSV ํ์ผ์ hadoop ์์ ์ฝ์ ์ ์๊ฒ ํด์ฃผ๋ OpenCSVSerde๋ฅผ ์ฌ์ฉํด๋ณด๊ณ , ๋ฐ์ดํฐ ๊ฒ์ฆ๊น์ง ํด๋ณผ ๊ฒ์ด๋ค.
* Hive 0.14 ๋ฒ์ ๋ถํฐ ๊ธฐ๋ณธ ์ง์
๋จผ์ ๋ฐ์ดํฐ๋ ์๋์ ๊ฐ๋ค. ๋ฐ์ดํฐ ๊ฒ์ฆ ์ค๋ฅ๋ฅผ ์ํด ์ค๊ฐ์ ์ค๋ฐ๊ฟ์ ๋ฃ์๋ค.
# csvserdetest.csv
NO,TYPE,CODE,NAME,ADRES,RN_ADRES,TELNO,CTPRVN_CD
"1",ํธ์์ ,"123456",7์ผ๋ ๋ธ,๊ฒฝ๊ธฐ๋ ์ค๋จ์ ๋ถ๋น๊ตฌ ์ผํ๋ 656,๊ฒฝ๊ธฐ๋์ฑ๋จ์ ๋ถ๋น๊ตฌ ๋ถ๋น๋ด๊ณก๋ก 151,,"41"
"2",ํธ์์ ,"123456",GS25,๊ฒฝ๊ธฐ๋ ์์์ ์ฅ์๊ตฌ ์ฒ์ฒ๋ 502-1, ๊ฒฝ๊ธฐ๋ ์์์ ์ฅ์๊ณ ์ ์๋ก 22,,"41"
"3",ํธ์์ ,"123456",๋ฏธ๋์คํฑ,๊ฒฝ๊ธฐ๋ ๊นํฌ์ ์ฌ์ฐ๋ 249-5,๊ฒฝ๊ธฐ๋ ๊นํฌ์ ์ฌ์ฐ์ค๋ก 11๋ฒ๊ธธ 20,,"41"
"4",ํธ์์ ,"123456",electromart/ํผ๊ท์ด,์ผ์ฑ,์์ง,์นด๋ฉ๋ผ,๋ํ๊ฐ์ ,๋์คํ๋ ์ด,๊ฒฝ๊ธฐ๋ ์ฑ๋จ์ ๋ถ๋น๊ตฌ ๋ฐฑํ๋ 531, ๊ฒฝ๊ธฐ๋ ์ฑ๋จ์ ๋ถ๋น๊ตฌ ๋ํฉํ๊ต๋ก 606๋ฒ๊ธธ 10,,"41"
"5",ํธ์์ ,"123456",์๋๋ฏธ,์ถฉ์ฒญ๋ถ๋ ์ฒญ์ฃผ์ ์ฒญ์๊ตฌ ์ค์ฐฝ์ ๊ฐ๋ฆฌ 646-1,์ถฉ์ฒญ๋ถ๋ ์ฒญ์ฃผ์ ์ฒญ์๊ตฌ
์ค์ฐฝ์ ์ค์ฐฝ์ค์๋ก 65,,"43"
Create๋ฌธ์ ์๋์ ๊ฐ๋ค.
CREATE EXTERNAL TABLE csvserde_test(
no string,
type string,
code string,
name string,
adres string,
rn_adres string,
telno string,
ctprvn_cd string
)
ROW FORMAT SERDE
'org.apache,hadoop,hive,serde2,OpenCSVSerde'
WITH SERDEPROPERTIES (
'escapeChar'='\\',
'quote'='"',
'seperatorChar'=',')
)
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'/user/hive/st/csvserde_test'
TBLPROPERTIES (
'skip.header.line.count'='1'
)
;
- sepratorChar: ์นผ๋ผ๊ฐ์ ๊ตฌ๋ถ์
- quoteChar: ์นผ๋ผ์ ๊ฐ์ ์ง์ ํ ๋ฌธ์๋ก ๋ฌถ์ด์ค๋ค.
- escapeChar: ์นผ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ๋ ํ์ฑํ์ง ์๊ณ ๋ฌด์
ํ ์ด๋ธ์ด ์์ฑ๋์์ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด๋ณด์.
ํญ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ธฐ์ ์ ํ์ธํด ์ค์ผ ํ ๊ฒ์ด ์๋ค. ๋ฐ๋ก ์ธ์ฝ๋ฉ์ด๋ค.
๋ฆฌ๋ ์ค์์ ํ์ผ ์ธ์ฝ๋ฉ ํ์ธ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
$ file -bi csvserdetest.csv
๋ง์ฝ utf-8์ด ์๋๋ผ๋ฉด ์๋ ๋ช ๋ น์ด๋ก ๋ฐ๊ฟ์ฃผ์
$ iconv -f euc-kr -t utf8 csvserdetest.csv > csvserdetest_utf8.csv
utf-8๋ก ์ธ์ฝ๋ฉ์ด ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ก์ ๋ฃ์ด๋ณด์
$ hadoop fs -put csvserdetest_utf8.csv /user/hive/st/csvserde_test
hive๋ก ์กฐํ๋ฅผ ํด๋ณด๋ฉด ๋ฐ์ดํฐ๊ฐ ๋์จ๋ค.
SELECT * FROM csvserde_test;
์ด์ ๋ฐ์ดํฐ ๊ฒ์ฆ์ ํด๋ณด์.
๋ฐ์ดํฐ๋ฅผ ๋ณด๋ฉด 4๋ฒ ๋ฐ์ดํฐ๋ ๋ฐ์ดํ ์์ด ์ผํ๊ฐ ๋ง๊ณ , 5๋ฒ ๋ฐ์ดํฐ๋ ์ค๊ฐ์ ์ค๋ฐ๊ฟ์ด ์๋ค. ์ด๋ฐ๊ฒ๋ค์ ๋ชจ๋ ๋ฐ๊ฒฌํ ์ ์์ด์ผ ํ๋ค.
ํด๋น ๋ฐ์ดํฐ์ ๊ฒ์ฆ์ python์ csv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ํ ์ ์๋ค. ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
# select_error_in_csv.py
import csv
a_list = []
f = open('C:/csvserdetest.csv', 'r', encoding='udf8')
reader = csv.reader(f)
for row in reader:
if len(row) != 12:
print(row)
f.close()
Leave a comment