[HADOOP] 돼지에서 CASE 문
HADOOP돼지에서 CASE 문
나는 몇 가지 조건에 따라 '지오'에서 'vertex_code'을 추출하기 위해 노력하고 있습니다 :
SUBSTRING(geocode,0,2) ----> Code
00-51 ----> 01
70 ----> 03
61-78 ----> 04
Else ----> 00
이제 수득 '코드'값은 'vertex_code'를 형성하는 단부 (접미사) 00와 연결 다시 '지오'값 (프리픽스) 및와 연결되어야
예 : 지오 = 44556677
SUBSTRING (지오 0,2)는 다음 코드 00-51 = 01 사이에 있다면
따라서 vertex_code = 014,455,667,700
다음은 내 스크립트입니다 :
item = load '/user/item.txt' USING PigStorage('|') AS (load_id:chararray, record_type:chararray, geocode:chararray);
newitem = FOREACH item GENERATE load_id, record_type,
(CASE (SUBSTRING(geocode,0,2))
WHEN 00-51 THEN 'CONCAT(01,CONCAT(geocode,00))'
WHEN 70 THEN 'CONCAT(03,CONCAT(geocode,00))'
WHEN 61-78 THEN 'CONCAT(04,CONCAT(geocode,00))'
ELSE 'CONCAT(00,CONCAT(geocode,00))'
END) AS vertex_code;
DUMP newitem;
나는 아래의 오류가 발생합니다 :
도움에 감사드립니다.
해결법
-
==============================
1.당신은 비교 다음 int로하고 캐스팅해야
당신은 비교 다음 int로하고 캐스팅해야
newitem = FOREACH item GENERATE load_id, record_type, (CASE WHEN ((int)SUBSTRING(geocode,0,2) <= 51 THEN CONCAT('01',CONCAT(geocode,'00')) WHEN ((int)SUBSTRING(geocode,0,2) = 70 THEN CONCAT('03',CONCAT(geocode,'00')) WHEN ((int)SUBSTRING(geocode,0,2) >= 61 and ((int)SUBSTRING(geocode,0,2) <=78 THEN CONCAT('04',CONCAT(geocode,'00')) ELSE CONCAT('00',CONCAT(geocode,'00')) END) AS vertex_code; DUMP newitem;
from https://stackoverflow.com/questions/48503572/case-statement-in-pig by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 어떻게 측면 뷰는 XML 데이터 형식 하이브에서 폭발 사용 하는가? (0) | 2019.10.06 |
---|---|
[HADOOP] 하이브 - 버킷 팅 및 파티셔닝 (0) | 2019.10.06 |
[HADOOP] Oozie 작업 제출 실패 (0) | 2019.10.06 |
[HADOOP] 하둡은 - 어떻게 mapred.JobConf에서 TASKID를 추출? (0) | 2019.10.06 |
[HADOOP] 하둡 스트리밍 mapred.output.compress에도 불구하고 압축 파일을 생성 = TRUE (0) | 2019.10.06 |