我在理解应该如何使用map
方面遇到一些问题。
在tutorial之后,我创建了一个包含以下文本的文件:
[open#apache]
[apache#hadoop]
我能够正确加载该文件:
a = load 'data/file_name.txt' as (M:map [])
现在,我如何获取所有“值”的列表?即。
(apache)
(hadoop)
此外,我刚刚开始学习猪,因此每一个提示都会非常有用。
答案 0 :(得分:2)
只有一种方法可以与地图互动,即使用#
运算符。为了使其具有更多功能,您必须定义一些UDFs。因此,地图可以真正用于纯猪的唯一方法是:
B = FOREACH A GENERATE M#'open' ;
将其作为输出产生:
(apache)
()
请注意#
之后的值是带引号的字符串,它不能更改,必须在运行作业之前设置。
另外,请注意为第二行创建了一个NULL,因为该映射不包含vaule'open'的键。这与在两个chararrays键和值的模式上使用FILTER略有不同:
B = FILTER A BY key=='open' ;
产生输出:
(open,apache)
如果只需要该值,则可以通过以下方式完成:
B = FOREACH (FILTER A BY key=='open') GENERATE value ;
产生:
(apache)
如果保持NULL很重要,也可以使用bincond:
生成它们B = FOREACH A GENERATE (key=='open'?value:NULL) ;
产生与M#'open'
相同的输出。
根据我的经验,地图不是很有用,因为它们有多么严格。