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

Posted

技术标签:

【中文标题】如何在 PIG 脚本中从数据包中读取数据【英文标题】:How to read data from data bag within a PIG script 【发布时间】:2011-02-09 13:16:21 【问题描述】:

我有一个数据包,格式如下 ([ChannelName# (bigXML,[]) ])

DataBag 仅包含一项元组。 元组仅由 Map 项组成。 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】:

试着把这个问题分解一下。

假设你拿到了你的内袋:

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;

您能否以交互方式尝试此操作,并且在您尝试这些操作后,也许可以用一些细节来编辑您的问题。

*** 的一些编辑提示:

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

【讨论】:

以上是关于如何在 PIG 脚本中从数据包中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pig - 如何从 CSV 文件中读取数据

如何在猪中读取json数据?

如何在 Spark 中从 cassandra datastax 云中读取数据

如何在javascript中从json文件中读取数据

一种从Mysql读取表数据到Pig的方法

如何在python中从txt文件中读取数据[重复]