从 Pig 脚本中提取部分输入

Posted

技术标签:

【中文标题】从 Pig 脚本中提取部分输入【英文标题】:Extracting part of the input from Pig Script 【发布时间】:2014-02-19 06:02:02 【问题描述】:

我正在尝试编写一个猪脚本来基本上执行以下操作。

    从源列表加载输入。我理解给出列表的方式是“s3://prod/propensity/probablitity/#runDate/#partition/part*” 例如,如果 runDate 是 20131020 并且分区是 1,3。 猪负载将从 s3:\ tap-prod/propensity/probablitity/20131020/1/part* 和 s3:\ tap-prod/propensity/probablitity/20131020/3/part* 加载

    我希望在输出中也将当前分区作为一列。所以从分区 1 读取的行应该有一个值为 1 的列,从分区 3 读取的行应该有该列的值为 3。

    目前我将“s3://tap-prod/propensity/glPurchaseProbabilities/#runDate/#partition/glPurchaseProbabilities.tsv/part*”作为输入传递给 Pig 脚本。

我的猪脚本会执行类似的加载操作。 s3_consolidated_results = 使用 PigStorage('\t', '-noschema') 加载'$input'

谁能帮我截取该输入变量并从中提取分区并作为列推送?

【问题讨论】:

【参考方案1】:

试试这个:

A = LOAD 'x' using PigStorage('\t','-tagsource');

引用自文档:

('tagsource') - Add a first column indicates the input file of the record.

之后,您可以进行投影以获取您真正感兴趣的文件名部分。

【讨论】:

试过了..我不断收到无法识别的选项原因:java.lang.RuntimeException:org.apache.commons.cli.UnrecognizedOptionException:无法识别的选项:org.apache.pig.builtin 的-tagsource。 PigStorage.(PigStorage.java:187) ... 29 更多原因:org.apache.commons.cli.UnrecognizedOptionException:无法识别的选项:-tagsource 你用的是哪个版本的猪? 我用 0.11.0 对其进行了测试,它工作正常。不过也应该使用 0.10.0 (pig.apache.org/docs/r0.10.0/func.html#pigstorage)。 我检查了代码,它没有 tagsource 选项。它只有 2 个架构选项。 svn.apache.org/viewvc/pig/tags/release-0.10.0/src/org/apache/… 在那里

以上是关于从 Pig 脚本中提取部分输入的主要内容,如果未能解决你的问题,请参考以下文章

PIG 脚本根据特定单词将大型文本文件拆分为多个部分

从文件名中提取时间戳并使用 Pig 将其添加到新列(例如日期)中

无法在 Pig 脚本中使用双管道分隔符提取数据

如何在unix脚本中提取文件名的一部分并检查它是不是存在[重复]

从 oozie 提交猪作业

Hadoop pig XPath 返回空属性值