0

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

按照本教程,我创建了一个包含以下文本的文件:

[open#apache]
[apache#hadoop]

的,我能够毫无错误地加载该文件:

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

现在,如何获取所有“”的列表?IE

(apache)
(hadoop) 

此外,我刚刚开始学习 Pig,因此每个提示都会非常有帮助。

4

1 回答 1

2

与地图交互的方式只有一种,那就是使用#操作符。为了使其具有更多功能,您必须定义一些UDF。因此,真正可以在纯猪中使用地图的唯一方法是:

B = FOREACH A GENERATE M#'open' ;

产生这个作为输出:

(apache)
()

请注意,后面的值#是带引号的字符串,它不能更改,必须在运行作业之前设置。

另外,请注意它为第二行创建了一个 NULL,因为该映射不包含带有“open”值的键。这与在两个字符数组键和值的模式上使用 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'

根据我的经验,地图不是很有用,因为它们的限制性很强。

于 2013-07-21T15:17:49.617 回答