복붙노트

[HADOOP] Pig에서 여러 맵의 튜플을 다른 행으로 분할하는 방법

HADOOP

Pig에서 여러 맵의 튜플을 다른 행으로 분할하는 방법

나는 Pig에서 다음과 같은 관계가 있습니다.

([account_id#100,
 timestamp#1434,
 id#900],

[account_id#100,
 timestamp#1434,
 id#901],

[account_id#100,
 timestamp#1434,
 id#902])

보시다시피, 튜플 내에 세 개의 맵 객체가 있습니다. 위의 모든 데이터는 관계에서 $ 0 '필드 내에 있습니다. 따라서 위의 데이터는 단일 바이트 배열 열과 관련이 있습니다.

데이터는 다음과 같이로드됩니다.

data = load 's3://data/data' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad');

DESCRIBE data;

data: {bytearray}

출력이 다음과 같이되도록이 데이터 구조를 3 개의 행으로 어떻게 분할합니까?

data: {account_id:chararray, timestamp:chararray, id:int}
(100, 1434,900)
(100, 1434,901)
(100, 1434,902)

해결법

  1. ==============================

    1.샘플 입력 데이터가 없으면 문제를 추측하기가 매우 어렵습니다. 이것이 중간 결과 인 경우, STORE를 사용하여 출력하고 출력 파일을 입력 할 수있는 것으로 입력하십시오. STRSPLIT를 사용 하여이 문제를 해결할 수 있었지만 입력이 단일 열과 단일 행인지 또는 동일한 열을 가진 세 개의 다른 행인지 확실하지 않습니다.

    샘플 입력 데이터가 없으면 문제를 추측하기가 매우 어렵습니다. 이것이 중간 결과 인 경우, STORE를 사용하여 출력하고 출력 파일을 입력 할 수있는 것으로 입력하십시오. STRSPLIT를 사용 하여이 문제를 해결할 수 있었지만 입력이 단일 열과 단일 행인지 또는 동일한 열을 가진 세 개의 다른 행인지 확실하지 않습니다.

    두 경우 모두 FLATTEN 연산자를 사용하고 나중에 STRSPLIT을 사용하여 데이터를 병합하면 도움이됩니다. 문제에 대한 자세한 정보와 입력 데이터를 얻으면 실례를들 수 있습니다.

    Data -> FLATTEN to get out of bag -> STRSPLIT over "," in a FOREACH,GENERATE
    
  2. from https://stackoverflow.com/questions/26043445/how-do-i-split-in-pig-a-tuple-of-many-maps-into-different-rows by cc-by-sa and MIT license