我在理解map
应该如何使用时遇到了一些问题。
按照本教程,我创建了一个包含以下文本的文件:
[open#apache]
[apache#hadoop]
的,我能够毫无错误地加载该文件:
a = load 'data/file_name.txt' as (M:map [])
现在,如何获取所有“值”的列表?IE
(apache)
(hadoop)
此外,我刚刚开始学习 Pig,因此每个提示都会非常有帮助。
我在理解map
应该如何使用时遇到了一些问题。
按照本教程,我创建了一个包含以下文本的文件:
[open#apache]
[apache#hadoop]
的,我能够毫无错误地加载该文件:
a = load 'data/file_name.txt' as (M:map [])
现在,如何获取所有“值”的列表?IE
(apache)
(hadoop)
此外,我刚刚开始学习 Pig,因此每个提示都会非常有帮助。
与地图交互的方式只有一种,那就是使用#
操作符。为了使其具有更多功能,您必须定义一些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'
。
根据我的经验,地图不是很有用,因为它们的限制性很强。