我第一次使用piglatin代码,希望能够访问Map中的值,首先将键值生成为字符,然后使用该键。例如,类别ID是我的Map,
catIds = foreach filteredContexts generate elementId,SUBSTRING(categoryAndConfidence,0,2) as catId;
categoryNames = foreach catIds generate elementId, categoryIds#catId as catName;
这是我收到的错误:错误1000:解析时出错。在第28行第64列遇到“catid”。期待一个“空”空“。。。
我想做的是不可能的吗?每次使用Map时是否需要显式地声明键值(例如:categoryids#'51')?
2条答案
按热度按时间nimxete21#
据我所知,pig并没有提供任何从Map上获取钥匙的内置方法。对于map字段,只能使用size函数获取其大小,使用isempty函数检查其是否为空,或者使用map#field#'key'查找给定键的值。
我自己编写了一些udf来帮助我更好地处理map数据类型。我的一个函数可能对您有用—maptobag—它可以转换Map
:map[value_type]
装进袋子里:bag{:tuple(key:chararray, value:value_type)}
. 有了这个包,你可以拿到钥匙,也可以进行展平操作。jchrr9hc2#
在你的代码里,
catIds
只有两个字段-elementId
以及catId
,您正在尝试访问categoryIds
在第二行。所以这行不通。请把它修好。特别是关于如何访问Map值,您需要将键括在引号中,例如
categoryIds#'catId'