[HADOOP] PIG : 열 이름에서 '::'를 제거하는 방법
HADOOPPIG : 열 이름에서 '::'를 제거하는 방법
나는 아래와 같은 돼지 관계가 있습니다.
Final = {input_module1 :: 유형 : charrray, input_module3 :: 이름 : charrr, input_module3 :: eid : long, input_module3 :: 이전 : charrr, test_id :: 유형 : charrrrr, test2r :: 이름 : charrrr}
input_md5 관계에 대한 모든 열을 하이브 테이블에 저장하려고합니다. 모든 input_md5 :: 유형 : chararray, input_md5 :: name : chararray, input_md5 :: id : long, input_md5 :: age : chararray not test test :: 유형 : chararray, test_2 :: name : chararray
pig에 input_md5의 열만 필터링하는 명령이 있습니까?
STORE = FOREACH FINAL GENERATE 모든 input_md5 :: type. 나는 돼지가 가지고 있다는 것을 알고있다 :
FOREACH FINAL GENERATE 모든 input_md5 :: type을 형식 구문으로 사용하지만 많은 열이 있으므로 코드 에서처럼 사용할 수 없습니다.
내가 시도 할 때 : STORE = FOREACH FINAL GENERATE input_md5 :: type .. bus_input_md5 :: name;
돼지는 오류를 던진다 :
org.apache.hive.hcatalog.common.HCatException : 2007 : 파티션 스키마에서 유효하지 않은 열 위치 : 위치 1에서 예상되는 열
미리 감사드립니다.
해결법
-
==============================
1.이 문제가 해결되었습니다 (아래 수정).
이 문제가 해결되었습니다 (아래 수정).
아래와 같이 일부 필터 조건과의 관계를 만듭니다.
DUMMY_RELATION = 필터 소스 _ 테이블 : 유형 == ''; (나는 type이라는 열을 가져갔습니다. 이것은 테이블의 모든 열로 필터링 할 수 있습니다. 중요한 것은 스키마가 필요하다는 것입니다)
FINAL_DATASET = UNION DUMMY_RELATION, SCHEMA_1, SCHEMA_2;
(이 새로운 DUMMY_RELATIONn은 노조에서 1 위를 차지해야합니다) 이제 더 이상 :: 연산자가 없습니다. 소스 테이블 (DUMMY_RELATION으로)과 대상 테이블의 열 순서가 동일하면 열 이름이 하이브 테이블의 열 이름과 일치합니다.
나에게 감사합니다 :)
-
==============================
2.이런 식으로 Neethu의 예제를 구현했습니다. 오타가있을 수 있지만이 아이디어를 구현하는 방법을 보여줍니다.
이런 식으로 Neethu의 예제를 구현했습니다. 오타가있을 수 있지만이 아이디어를 구현하는 방법을 보여줍니다.
tableA = LOAD 'default.tableA' USING org.apache.hive.hcatalog.pig.HCatLoader(); tableB = LOAD 'default.tableB' USING org.apache.hive.hcatalog.pig.HCatLoader(); --load empty table finalTable = LOAD 'default.finalTable' USING org.apache.hive.hcatalog.pig.HCatLoader(); --example operations that end up with '::' in column names g = group tableB by (id); j = JOIN tableA by id LEFT, g by group; result = foreach j generate tableA::id, tableA::col2, g::tableB; --union empty finalTable and result result2 = union finalTable, result; --bob's your uncle STORE result2 INTO 'finalTable' USING org.apache.hive.hcatalog.pig.HCatStorer();
Neetu에 간다!
from https://stackoverflow.com/questions/38902046/pig-how-to-remove-in-the-column-name by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] UDF에 전달하기 위해 가방을 절단 (0) | 2019.09.07 |
---|---|
[HADOOP] S3 병렬 읽기 및 쓰기 성능? (0) | 2019.09.07 |
[HADOOP] HDFS는 사용 가능한 블록을 어떻게 계산합니까? (0) | 2019.09.07 |
[HADOOP] 타임 스탬프는 Apache Hive의 시간대와 함께 저장됩니까? (0) | 2019.09.06 |
[HADOOP] Java 클라이언트를 통해 Hadoop 작업 정보를 가져올 수 없습니다 (0) | 2019.09.06 |