如何在 Pig 中加入 2 个不同的变量?

Posted

技术标签:

【中文标题】如何在 Pig 中加入 2 个不同的变量?【英文标题】:How to Join 2 different variables in Pig? 【发布时间】:2016-09-12 21:04:45 【问题描述】:

我是猪的新手,我编写了以下猪脚本:

DEFINE format `format_text.py $EMOJI $ACRONYM` SHIP ('$STREAM_FILE_PATH/format_text.py');

DEFINE parse `parse.sh` SHIP ('$STREAM_FILE_PATH_SYNTAXNET/parse.sh');

DEFINE process_roots `process_roots.py` SHIP ('$STREAM_FILE_PATH_SYNTAXNET/process_roots.py');

input_data = LOAD '$DATA_INPUT';

result1 = STREAM input_data THROUGH format;
result2 = STREAM result1 THROUGH parse;
result3 = STREAM result2 THROUGH process_roots;

result4 = foreach result1 Generate CONCAT (result1, result3);

STORE result1 into '$DATA_OUTPUT';
STORE result2 into '$SYNTAXNET_OUTPUT';
STORE result4 into '$SYNTAXNET_RESULTS';

所以,我的input_data 是推文的 json 文件。

    format 格式化 json 的“文本”字段以清理推文。 parse 通过 syntaxnet 运行清理后的 json 以生成依赖关系。输出 result2 类似于:

2 Bank _ NOUN NNP _ 3 nn _ _

对于推文的每个单词(其中第二列是单词)。

    process_rootsresult2 进行更多处理并生成 result3 这是一个 json 字段,如下所示:

avl_tags_syntaxnet: ['pos_tag': 'NNP', 'position': '1', 'dep_rel': 'nn', 'parent': '3', 'word': 'US', ....................... 'pos_tag': '.', 'position': '30', 'dep_rel': 'punct', 'parent': '23', 'word': '...']

现在,我要做的就是将新创建的 Json 字段 (result3) 附加到 result1 并将其存储在某处。我在 pig 中阅读了有关 CONCAT 的信息,并在 pig 脚本中为 result4 编写了此代码,但它引发了错误。请告诉我正确的方法是什么。

【问题讨论】:

你的结果关系在哪里? result4 = foreach 结果 Generate CONCAT (result, result2);CONCAT 用于字符串类型,因此您将像 CONCAT((chararray)result3.$0,(chararray)result1.$0) 一样使用它 非常抱歉错别字。根本没有结果。它应该是 result1 而不是 result。我更改了变量名称,但忘记在任何地方进行更改。我现在编辑了这个问题。感谢您的回复。 @inquisitive_mind 您能否详细说明 $ sumbols 的用途?谢谢! @cricket_007 它会引发语法错误。 $ 符号是对元组内索引的引用。 【参考方案1】:

连接适用于字段,但您正在尝试组合多个别名。

组合别名的方法是使用 join


根据代码的结构,为在各种操作期间保持不变的每一行使用(或添加)一个唯一标识符。然后在最后阶段将它们全部连接在一起。

【讨论】:

谢谢丹尼斯。所以现在我有 2 个结果 result1result2(都是 jsons)和一个名为 avl_lexicon_text 的公共字段。你能告诉我现在如何对这两个执行JOIN 吗?

以上是关于如何在 Pig 中加入 2 个不同的变量?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pig 如何在加载功能中加入白名单或黑名单?

如何在 R 中加入来自 2 个不同 csv 文件的数据?

如何在pig中加载带有制表符和逗号的数据集

在 Pig 中加入两个关系并检索所需数据

如何在 Pandas 中加入 2 列词嵌入

在 Hadoop Pig 中加入和分组