복붙노트

[HADOOP] 돼지 기본 JsonLoader 스키마 문제

HADOOP

돼지 기본 JsonLoader 스키마 문제

돼지를 사용하여 구문 분석해야하는 데이터가 있습니다.

데이터

{
    "Name": "BBQ Chicken",
    "Sizes": [
        { "Size": "Large", "Price": 14.99 },
        { "Size": "Medium", "Price": 12.99 }
    ],
    "Toppings": [ "Barbecue Sauce", "Chicken", "Cheese" ]
}

이름과 크기에 대한 스키마를 정의 할 수 있지만 토핑 작업을 수행 할 수 없습니다. 도움이 필요하시면 여기를 클릭하십시오.

스크립트

data = LOAD '/user/hue/data/nested_json_pizza_sample_data.json'
       USING JsonLoader('Name:chararray,
                         Sizes:bag{tuple(Size:chararray, Price:float)},
                         Toppings:tuple(a:chararray)');
DUMP data;

산출

아래에서 볼 수 있듯이 Topping의 데이터는 파싱되지 않습니다.

(BBQ Chicken,{(Large,14.99),(Medium,12.99)},)
(Hawaiian,{(Large,12.99),(Medium,10.99)},)
(Vegetable,{(Large,12.99),(Medium,10.99)},)
(Pepperoni,{(Large,12.99),(Medium,10.99),(Small,7.49)},)
(Cheese,{(Large,10.99),(Medium,9.99),(Small,5.49)},)
data: {Name: chararray,Sizes: {(Size: chararray,Price: float)},Toppings: (a: chararray)}

해결법

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

    1.여기에는 두 가지 옵션이 있습니다 : 배열의 항목 수가 알려지지 않은 경우.

    여기에는 두 가지 옵션이 있습니다 : 배열의 항목 수가 알려지지 않은 경우.

    Toppings:{t:(i:chararray)}
    

    또는 요소의 수가 항상 같을 경우

    Toppings: (i: chararray, j: chararray, k: chararray)
    

    출력을 줄 것이다.

    (BBQ Chicken,{(Large,14.99),(Medium,12.99)},)
    
  2. from https://stackoverflow.com/questions/21076583/pig-default-jsonloader-schema-issue by cc-by-sa and MIT license