[HADOOP] 돼지 필요한 유형의 스키마 변경
HADOOP돼지 필요한 유형의 스키마 변경
나는 새로운 돼지 사용자입니다.
내가 수정할 기존의 스키마를 가지고있다. 6 열이 다음과 같이 내 원본 데이터는 다음과 같습니다
Name Type Date Region Op Value
-----------------------------------------------------
john ab 20130106 D X 20
john ab 20130106 D C 19
jphn ab 20130106 D T 8
jphn ab 20130106 E C 854
jphn ab 20130106 E T 67
jphn ab 20130106 E X 98
등등. 각 연산 값은 항상 C, T 또는 X를하다
나는 기본적으로 7 개 컬럼에 다음과 같은 방법으로 내 데이터를 분할 할 :
Name Type Date Region OpX OpC OpT
----------------------------------------------------------
john ab 20130106 D 20 19 8
john ab 20130106 E 98 854 67
하나 개의 연산 값에 대해 각각은 기본적으로 3 열로 연산 열을 분할. 이 컬럼의 각 열 값에서 적절한 값을 포함해야합니다.
어떻게 돼지에서이 작업을 수행 할 수 있습니다?
해결법
-
==============================
1.원하는 결과를 달성하기위한 한 가지 방법 :
원하는 결과를 달성하기위한 한 가지 방법 :
IN = load 'data.txt' using PigStorage(',') as (name:chararray, type:chararray, date:int, region:chararray, op:chararray, value:int); A = order IN by op asc; B = group A by (name, type, date, region); C = foreach B { bs = STRSPLIT(BagToString(A.value, ','),',',3); generate flatten(group) as (name, type, date, region), bs.$2 as OpX:chararray, bs.$0 as OpC:chararray, bs.$1 as OpT:chararray; } describe C; C: {name: chararray,type: chararray,date: int,region: chararray,OpX: chararray,OpC: chararray,OpT: chararray} dump C; (john,ab,20130106,D,20,19,8) (john,ab,20130106,E,98,854,67)
최신 정보:
당신이 추가가 계산에 상을 줄이고 추가하는 순서를 생략하려는 경우, 당신은. 튜플 V의 해당 영업 이익 각각의 값을 앞에 그런 다음 원하는 OPX, OpC에, OPT 순서를 가지고 사용자 정의 UDF를 사용하여 튜플 필드를 정렬 할 수 있습니다 :
register 'myjar.jar'; A = load 'data.txt' using PigStorage(',') as (name:chararray, type:chararray, date:int, region:chararray, op:chararray, value:int); B = group A by (name, type, date, region); C = foreach B { v = foreach A generate CONCAT(op, (chararray)value); bs = STRSPLIT(BagToString(v, ','),',',3); generate flatten(group) as (name, type, date, region), flatten(TupleArrange(bs)) as (OpX:chararray, OpC:chararray, OpT:chararray); }
어디 mjar.jar에서 TupleArrange이 같은 것입니다 :
.. import org.apache.pig.EvalFunc; import org.apache.pig.data.Tuple; import org.apache.pig.data.TupleFactory; import org.apache.pig.impl.logicalLayer.schema.Schema; public class TupleArrange extends EvalFunc<Tuple> { private static final TupleFactory tupleFactory = TupleFactory.getInstance(); @Override public Tuple exec(Tuple input) throws IOException { try { Tuple result = tupleFactory.newTuple(3); Tuple inputTuple = (Tuple) input.get(0); String[] tupleArr = new String[] { (String) inputTuple.get(0), (String) inputTuple.get(1), (String) inputTuple.get(2) }; Arrays.sort(tupleArr); //ascending result.set(0, tupleArr[2].substring(1)); result.set(1, tupleArr[0].substring(1)); result.set(2, tupleArr[1].substring(1)); return result; } catch (Exception e) { throw new RuntimeException("TupleArrange error", e); } } @Override public Schema outputSchema(Schema input) { return input; } }
from https://stackoverflow.com/questions/15324747/pig-changing-schema-to-required-type by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하둡 맵퍼로 다중 입력 (0) | 2019.09.20 |
---|---|
[HADOOP] 문제 하둡에 RecommenderJob를 실행 (0) | 2019.09.20 |
[HADOOP] MR 작업의 다양한 단계의 올바른 순서? (0) | 2019.09.20 |
[HADOOP] 어떻게 하이브의 교차로와 두 배열의 조합을 계산하기? (0) | 2019.09.20 |
[HADOOP] org.apache.hive.service.cli.HiveSQLException : java.lang.NoClassDefFoundError가 : 조직 / 아파치 / 하둡 / IPC / CallerContext $ 빌더 (0) | 2019.09.20 |