了解地图语法

时间:2013-07-21 12:24:30

标签: apache-pig

我在理解应该如何使用map方面遇到一些问题。

tutorial之后,我创建了一个包含以下文本的文件:

[open#apache]
[apache#hadoop]

我能够正确加载该文件:

a = load 'data/file_name.txt' as (M:map [])

现在,我如何获取所有“”的列表?即。

(apache)
(hadoop) 

此外,我刚刚开始学习猪,因此每一个提示都会非常有用。

1 个答案:

答案 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'相同的输出。

根据我的经验,地图不是很有用,因为它们有多么严格。