2015-02-22 18 views
2

У меня есть файл JSON и вы хотите читать с помощью Apache Pig.Многострочный JSON читает с использованием Apache PIG

Я попытался использовать обычный JSONLOADER, но выглядит как JSONLOADER работает только с одной строкой JSON. Затем я попытался с Elephant-Bird. Но я все еще не в состоянии правильно видеть результаты. Может ли кто-нибудь предложить решение?

Вход:

{"employees":[           
     {"firstName":"John", "lastName":"Doe"},    
     {"firstName":"Anna", "lastName":"Smith"},      
     {"firstName":"Peter", "lastName":"Jones"}    
]}  

Примечание: Я не хочу, чтобы преобразовать входной сигнал в одной строкой.

Сценарий:

A = LOAD 'input' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad');  
B = FOREACH A GENERATE FLATTEN($0#'employees');  
Dump B; 

Ожидаемый результат должен быть:

([firstName#John,lastName#Doe])          
([firstName#Anna,lastName#Smith])         
([firstName#Peter,lastName#Jones]) 
+0

Hi Siva ... можете ли вы ответить на мой вопрос @Sivasakthi Jayaraman – jk7

+0

Загрузчик JsonLoader или elephantbird всегда будет работать только с одной линией. Он не будет работать с многострочным. Вам нужно преобразовать свой вход в одну строку, прежде чем перейти к свинью. Одним из способов было бы написать сценарий оболочки и вызвать логику для замены многострочной одиночной строки с помощью команды «SED», а затем вызвать скрипт свиньи в сценарии оболочки. Эта ссылка поможет вам вызвать сценарий свиньи через оболочку. http://stackoverflow.com/questions/26239338/loading-files-into-pig-and-decompressing-them/26264641#26264641 –

ответ

1

Как уже упоминалось в комментариях Шивой, ответ в основном, что вам нужно изменить ваш вход в одну строку ,

Загрузчик JsonLoader или elephantbird всегда будет работать только с одной линией . Он не будет работать с многострочным. Вам необходимо преобразовать ваш вход в одну строку, прежде чем перейти к свиньи. Одним из способов было бы написать сценарий оболочки и вызвать логику для замены многострочной одиночной строки с помощью команды «SED», а затем вызвать скрипт свиньи в сценарии оболочки. Эта ссылка поможет вам вызвать сценарий свиньи через оболочку.