2015-09-03 1 views
1

Привет, ребята, я только начал заниматься свиньями, мне было интересно, способен ли JsonLoader анализировать всю ценность внутри json.Получение значения имени JSON в PIG

, например:

{"food":"Tacos", "person":"Alice", "amount":3} 

и мне нужно, чтобы получить «пищу» хранится в виде соотношения в chararray и «Tacos», которая является значение «пищи» в другой связи.

после прочтения многих учебников и документации, я havent нашел встроенный метод для этого.

означает ли это, что единственным решением для этого является UDF?

спасибо большое!

+1

@Zelldon UDF = Пользовательская функция. Если вы не знаете о Apache Pig, пожалуйста, не публикуйте грубые комментарии. – Balduz

ответ

1

Я нашел ответ, который должен использовать внешнюю банку с щебет.

register 'hdfs:/udf/elephant-bird-pig-4.10.jar'; 
register 'hdfs:/udf/elephant-bird-core-4.10.jar'; 
register 'hdfs:/udf/elephant-bird-hadoop-compat-4.10.jar'; 
register 'hdfs:/udf/json-simple-1.1.1.jar'; 

test.json

{"food":"Tacos", "person":"Alice", "amount":3} 

сценарий:

A = LOAD 'hdfs:/test.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS (json:map[]); 
DUMP A; 

и вывод, что я хотел это:

([amount#3,food#Tacos,person#Alice]) 

Спасибо!

0

input- pig.json

{"food":"Tacos", "person":"Alice", "amount":3} 

сценарий

A = LOAD '/home/kishore/Data/Pig/pig.json' USING JsonLoader('food:chararray,person:chararray,amount:int'); 
B = foreach A generate food,person,amount; 
Dump B; 

выход

(Tacos,Alice,3) 
+0

спасибо за ответ, но как вы получаете «поле имени», которое является «пищей» для отношения? потому что сценарии в имени поля могут меняться, поэтому мне нужно получить как поле имени, так и значение, чтобы связать их с картой. – kenlz

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