Pig:使用外部模式文件加载数据文件

Posted

技术标签:

【中文标题】Pig:使用外部模式文件加载数据文件【英文标题】:Pig: loading a data file using an external schema file 【发布时间】:2013-11-24 10:06:07 【问题描述】:

我有一个数据文件和一个相应的架构文件存储在不同的位置。 我想使用模式文件中的模式加载数据。我尝试使用

A= LOAD '<file path>' USING PigStorage('\u0001') as '<schema-file path>' 

但得到一个错误。

正确加载文件的语法是什么?

架构文件格式类似于:

data1 - complex - - - - format - -
data1 event_type - - - - - long - "ends '\001'"
data1 event_id - - - - - varchar(50) - "ends '\001'"
data1 name_format - - - - - varchar(10) - "ends newline"

【问题讨论】:

【参考方案1】:

可以使用模式文件加载数据。

当您使用 '-schema' 标志存储数据时,在输出路径中,有一个 .pig-schema 文件,其中包含带有架构的 json。

加载数据时可以使用

B = LOAD '<>' USING PigStorage(',','-schema'); 

你可以通过运行查看架构

describe A;

查看this good post了解更多详情。

此功能从 Pig 0.10 开始可用。

【讨论】:

【参考方案2】:

AS 子句用于直接指定模式而不是模式文件的路径。

 A = LOAD '<file path>' USING PigStorage('\u0001') as 'type: long, id:chararray, nameformat:chararray';

或者,一个名为.pig_schema 的文件也可以工作,该文件包含架构并位于您的输入目录中。从来没有尝试过。它必须是具有以下语法的 JSON 文件:

"fields":[
        "name":"type","type":55,"description":"Fu","schema":null,
        "name":"id","type":15,"description":"Bar","schema":null,
        "name":"nameFormat","type":55,"description":"Xu","schema":null,
    ] ,"version":0,"sortKeys":[],"sortKeyOrders":[]

如果您在使用 PigStorage 存储时指定 -schema 选项,也会生成此文件。

【讨论】:

以上是关于Pig:使用外部模式文件加载数据文件的主要内容,如果未能解决你的问题,请参考以下文章

使用模式加载数据时出现 Apache Pig ClassCast 异常

如何加载分区到 Hbase 表的 hive orc

使用 Apache Pig 将数据加载到 Hbase 表时,如何排除 csv 或文本文件中没有数据(只有空格)的列?

hive 外部表增量加载

在 PIG 中读取带有模式的文件

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