如何从PIG脚本中的数据包中读取数据

时间:2011-02-09 13:16:22

标签: apache-pig

我有一个databag,其格式如下 {([ChannelName#{ (bigXML,[])} ])}

  • DataBag只包含一个作为元组的项目。
  • 元组仅包含Map的项目。
  • 地图的类型是通道名称和值之间的映射。
  • 这里的值是DataBag类型,它只包含一个元组。
  • 元组由两个项目组成,一个是charrarray(非常大的字符串),另一个是地图

我有一个发出上述包的UDF。

现在我需要通过将DataBag中唯一的元组与Map中的给定Channel相对应来调用另一个UDF。

假设没有数据包和元组 ([ChannelName#{ (bigXML,[])} ]) 我可以使用$0.$0#'StdOutChannel'访问数据 现在把一个元组放在一个包里面 {([ChannelName#{ (bigXML,[])} ])} 如果我做$0.$0.$0#'StdOutChannel'(前置$ 0),我会收到以下错误  ERROR 1052: Cannot cast bag with schema bag({bytearray}) to map

如何访问数据包中的数据?

1 个答案:

答案 0 :(得分:2)

尝试稍微解决这个问题。

让我们说你得到你的内心:

MYBAG = $0.$0#'StdOutChannel';

首先,您可以ILLUSTRATEDUMP吗?

你可以用这个包做什么?通常FOREACH超过里面的元组。

A = FOREACH MYBAG {
    GENERATE $0 AS MyCharArray, $1 AS MyMap
};

ILLUSTRATE A; -- or if this doesn't work
DUMP A;

您是否可以通过互动方式进行尝试,并且可能会根据您尝试这些内容的某些细节再次编辑您的问题。

StackOverflow的一些编辑提示:

  • 在代码周围添加反引号(`ILLUSTRATE`)
  • 每行缩进代码块4个空格