如何从猪地图中获取变量键的值?
How to get the value for a variable key from a pig map?
有没有一种方法可以使用字段作为键来获取变量键的映射值?
例如:我的公司数据有这样的语言环境和名称字段
{"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"}
据我所知,您不能在 Pig 中执行此操作。键必须是静态值。所以例如这应该有效:
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';
并对每个键执行此操作,然后对所有子集执行并集。这个解决方案又差又丑,但它有效。
有没有一种方法可以使用字段作为键来获取变量键的映射值? 例如:我的公司数据有这样的语言环境和名称字段
{"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"}
据我所知,您不能在 Pig 中执行此操作。键必须是静态值。所以例如这应该有效:
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';
并对每个键执行此操作,然后对所有子集执行并集。这个解决方案又差又丑,但它有效。