2017-02-12 9 views
9

Есть ли способ, которым мы можем получить значение карты для переменных ключей, используя поле в качестве ключа? Например: данные Моя компания имеет региональные и имя поля как этотКак получить значение для переменной ключа из карты свиньи?

{"en_US", (["en_US" : "English Name"], ["fr_FR" : "French Name"])} 

То, что я хочу, по существу, является, чтобы получить значение карты, используя локаль в качестве ключа, как это будет отличаться для разных языков.

company_data = load '/data' using PigStorage(); 

final_company_data = FOREACH company_data GENERATE 
              value.locale as locale 
              value.name#locale; 

Следующая дает мне кузен ошибки я понимаю, что для получения значения из карты мы должны value.name # «en_US». Есть ли способ, которым мы можем использовать локаль, чтобы она заменила правильное значение?

Output : final_company_data = {"en_US", "English Name"} 

ответ

5

Насколько я помню, вы не можете сделать это на Свинье. Ключ должен быть статическим. Так, например, это должно работать:

final_company_data = FOREACH company_data GENERATE 
             value.locale as locale 
             value.name#'en_US'; 

Если ключ комплект размер не слишком большой, вы можете попробовать что-то подобное (но это включает в себя много печатать):

en = FILTER company_data BY value.locale == 'en_US'; 
final_company_data_en = FOREACH company_data GENERATE 
             value.locale as locale 
             value.name#'en_US'; 
fr = FILTER company_data BY value.locale == 'fr_FR'; 
final_company_data_en = FOREACH company_data GENERATE 
             value.locale as locale 
             value.name#'fr_FR'; 

и сделать это для каждого и затем объединение всех подмножеств. Это решение плохое и уродливое, но оно работает.

+0

Спасибо за этот пример. – TommyT

+0

Если это решит вашу проблему, вы можете поддержать или принять ответ :) – bartektartanus

+0

Это так. Я просто жду, чтобы увидеть, есть ли у кого-то лучшее, потому что я тоже не думаю о какой-либо альтернативе. – TommyT

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

  • Нет связанных вопросов^_^