在 pig 中加载多个文件 - 扩展

Posted

技术标签:

【中文标题】在 pig 中加载多个文件 - 扩展【英文标题】:Load multiple files in pig - extended 【发布时间】:2013-12-17 10:59:38 【问题描述】:

请帮帮我... 我为此花费了很多时间。

我的文件夹中有文件,我希望根据文件名的顺序将它们加载到其中。

我什至还编写了 Java 代码来转换文件名以匹配以下链接中指南中的格式。

    Load multiple files in pig Pig Latin: Load multiple files from a date range (part of the directory structure) http://netezzaadmin.wordpress.com/2013/09/25/passing-parameters-to-pig-scripts/

我正在使用猪 11.0

在我的 script.pig 中,

    set io.sort.mb 10;
    REGISTER 'path_to/lib/pig/piggybank.jar';

    data_ = LOAD '$input' USING org.apache.pig.piggybank.storage.XMLLoader('Data') AS (data_:chararray);
    DUMP data_;

在外壳中

    [root@servername currentfolder]# pig -x local script.pig -param input=/20131217/1..10.xml

返回错误:

    [main] ERROR.org.apache.pig.Main - ERROR 2999: Unexpected error. Undefined parameter : input

【问题讨论】:

尝试在命令行中的“script.pig”之前指定“-param input=...”。如果第一件事不起作用,也尝试引用 input="..." 您的解决方案奏效了! 1..10 部分除外。当我输入 1,2,3,4,5,6,7,8,9,10 但不是 1..10 时可以,知道吗?它现在给出 ERROR 2244 好的,根据我包含的第二个链接,它说 1..10 的扩展是由 Linux 完成的,而不是 hdfs api。有什么建议或意见吗? 您是否按照我的建议尝试引用?我认为它会禁用 Linux 扩展。 Hadoop 的 glob 也可能存在限制。检查此处支持的确切 glob:books.google.com/… 【参考方案1】:

我不知道你为什么要使用输入参数。

例如,为了加载文件夹 MyFolder/CurrentDate/ 中的每个文件(格式为 YYYYMMDD),我使用以下脚本:

%default DATE `date  +%Y%m%d`;
x_basic_table = LOAD '/MyFolder/$DATE';

美好的一天

【讨论】:

谢谢!!我有多个具有相同日期和时间的记录,每条记录都存储在单独的文件中。知道排序的唯一方法是通过文件名。所以我需要它根据文件名(数字)加载文件(第一个条目必须来自最小数字的文件)。

以上是关于在 pig 中加载多个文件 - 扩展的主要内容,如果未能解决你的问题,请参考以下文章

在 PIG 中加载 CSV 文件

在 PIG 中加载文件时如何忽略“(双引号)?

在 Hortonworks Sandbox 内的 Pig 脚本中加载 JSON 文件

在 pig 中加载由双冒号 :: 分隔的文件

在 Apache Pig 中加载 csv 文件时出错

基于感兴趣的日期范围作为参数输入限制在 Pig Latin 中加载日志文件