2014-09-08 4 views
2

Я работаю с Apache Pig в последнее время. Я хотел извлечь несколько столбцов на основе набора данных из визга. Пожалуйста, посмотрите на коды, которые я использовал. Я попытался запустить их как на платформе Hortonworks, так и на моей машине (Ubuntu). Я получаю результаты, соответствующие разным столбцам в качестве вывода. Пожалуйста, укажите, где я делаю ошибку ..Получение неправильных значений от JsonLoader Apache Pig

Запрос:

grunt> business = load 'yelp_academic_dataset_business.json' 
      using JsonLoader('name:chararray, state:chararray'); 

grunt> business_name = foreach business generate name, state;              
grunt> toPrint = limit business_name 5;                   
grunt> dump toPrint; 

Выход:

(5AJdS8LYpCgzfOwGaEqZkA, 14362 N Frank Lloyd Wright Blvd Ste B104 Scottsdale, AZ 85260) (6UXw7_U13Th0PZlMXZbjMg, Маккаррэна Аэропорт напротив ворот D1 юго-востоке Лас-Вегас, Невада) (80VmGCy6UcYYCKC_BONZTQ 524 N St девяносто второй Scottsdale, AZ 85256) (95p9Xg358BezJyk1wqzzyg, 5114 Farwell St Mc Farland, WI 53558) (EkhrRWzevfFJc8Pm2dVPEA, 140 University Avenue W Waterloo, ON N2L 3W 6)

Пример ввода из файла:

{ 
    "business_id": "vcNAWiLM4dR7D2nwwJ7nCA", 
    "full_address": "4840 E Indian School Rd\nSte 101\nPhoenix, AZ 85018", 
    "hours": { 
      "Tuesday": {"close": "17:00", "open": "08:00"}, 
      "Friday": {"close": "17:00", "open": "08:00"}, 
      "Monday": {"close": "17:00", "open": "08:00"}, 
      "Wednesday": {"close": "17:00", "open": "08:00"}, 
      "Thursday": {"close": "17:00", "open": "08:00"} 
      }, 
    "open": true, 
    "categories": ["Doctors", "Health & Medical"], 
    "city": "Phoenix", "review_count": 7, 
    "name": "Eric Goldberg, MD", 
    "neighborhoods": [], 
    "longitude": -111.98375799999999, 
    "state": "AZ", 
    "stars": 3.5, 
    "latitude": 33.499313000000001, 
    "attributes": {"By Appointment Only": true}, 
    "type": "business" 
} 

Edit 2:

Я также скопировал слон птица-2.2.3.jar файл в/Hadoop/бен папку. Внутри этой папки я вызываю «pig -x local» для запуска PIG в локальном режиме. Как только он запустится, я зарегистрирую регистр elphant-bird-2.2.3.jar, а затем продолжу запрос.

После включения слона баночке:

grunt> register elphant-bird-2.2.3.jar; 
grunt> business = load 'yelp_academic_dataset_business.json' 
       using JsonLoader('name:chararray, state:chararray'); 

grunt> business_name = foreach business generate name, state;              
grunt> toPrint = limit business_name 5;                   
grunt> dump toPrint; 

ответ

0

Для вложенного JSON вы можете загрузить его, используя следующий сценарий -

register elephant-bird-pig-4.4.jar; 
register elephant-bird-core-4.4.jar; 
register elephant-bird-hadoop-compat-4.4.jar; 
register google-collections-1.0-rc1.jar; 
register json_simple-1.1.jar; 

business = load 'yelp_academic_dataset_business.json' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad'); 
dump business; 

В качестве альтернативы, вы можете также загрузить его как -

business = load 'pigJsontest.txt' using com.twitter.elephantbird.pig.load.JsonLoader() as (json:map[]); 

Любой из этих сценариев будет загружать данные json в формате карты [key, value format], здесь - http://pig.apache.org/docs/r0.11.1/basic.html#map-schema

Вы должны были бы получить доступ к конкретному элементу итерацией этот map.Example -

id_state = foreach business generate (CHARARRAY)$0#'business_id' as business_id, (CHARARRAY)$0#'state' as state; 
dump id_state; 
+0

Спасибо, сэр. Моя проблема решена. Не удалось повысить свой ответ, поскольку у меня недостаточно репутации :( – Ram27

Смежные вопросы