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 异常