如何从猪图中获取变量键的值?

时间:2017-02-12 20:15:22

标签: hadoop apache-pig

有没有办法可以使用字段作为键来获取变量键的映射值? 例如:我公司的数据有像这样的区域设置和名称字段

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

我真正想要的是使用locale作为关键字获取地图的价值,因为不同的语言环境会有所不同。

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"}

1 个答案:

答案 0 :(得分: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';

并为每个键执行此操作,然后执行所有子集的并集。这个解决方案既糟糕又丑陋,但它确实有效。