Pig:使用 AvroStorage 加载会引发“无法从 loadFunc 获取架构”异常
Posted
技术标签:
【中文标题】Pig:使用 AvroStorage 加载会引发“无法从 loadFunc 获取架构”异常【英文标题】:Pig: Load using AvroStorage throws "Cannot get schema from loadFunc" exception 【发布时间】:2015-10-05 19:48:55 【问题描述】:在 hadoop 中,我们得到了存储在 '/datasets/xyz/storm/information/' 下的 avro 文件列表。
-rw-r----- 3 storm XYZ 5570959 2015-10-01 01:46 /datasets/xyz/storm/information/storm_1443681972122.avro
-rw-r----- 3 storm XYZ 5571687 2015-10-01 01:46 /datasets/xyz/storm/information/storm_1443681973303.avro
-rw-r----- 3 storm XYZ 5632194 2015-10-01 01:46 /datasets/xyz/storm/information/storm_1443681975019.avro
什么有效?:
a= LOAD '/datasets/xyz/storm/information/storm_1443681975019.avro' USING AvroStorage ();
Avro Schema 在每个 avro 文件中定义为以下格式的第一条记录:
header: (metadata_uuid: chararray,publishDate: chararray,eventDate: chararray),raw_data: chararray
我想一次将所有 avro 文件数据加载到别名“a”中。所以,我尝试了以下代码:
a= = LOAD '/datasets/xyz/storm/information/' using AvroStorage();
我得到如下异常:
ERROR 2245: Cannot get schema from loadFunc org.apache.pig.builtin.AvroStorage
我还尝试如下明确提供架构:
a= LOAD '/datasets/xyz/storm/information/' USING AvroStorage ('schema','"header": ("metadata_uuid": "chararray","publishDate": "chararray","eventDate": "chararray"),"raw_data": "chararray"');
你能告诉我正确的方法吗?
谢谢!
【问题讨论】:
在这里找不到有用的回复:***.com/questions/21588911/… 你可以试试:A = LOAD '/datasets/xyz/storm/information/*.avro' USING org.apache.pig.piggybank.storage.avro.AvroStorage(); @Murali Rao:感谢您的回复。得到同样的错误 【参考方案1】:提供的架构不正确,格式也不正确。我从 AvroStorage 参数中删除了“模式”。 我修改了脚本如下:
a= LOAD '/datasets/xyz/storm/information/' USING AvroStorage('"type" : "record","name" : "DataRecord","namespace" : "com.bestbuy.sim.appTalkProjects.adobe.adobeClickStreamBDPSA.util","doc" : "Schema for com.bestbuy.sim.appTalkProjects.adobe.adobeClickStreamBDPSA.util.DataRecord","fields" : [ "name" : "header","type" : [ "null", "type" : "record","name" : "Header","doc" : "Schema for com.bestbuy.sim.appTalkProjects.adobe.adobeClickStreamBDPSA.util.Header","fields" : [ "name" : "metadata_uuid","type" : [ "null", "string" ], "name" : "publishDate","type" : [ "null", "string" ], "name" : "eventDate","type" : [ "null", "string" ] ] ], "name" : "raw_data","type" : [ "null", "string" ] ]');
这使得加载成功。
【讨论】:
以上是关于Pig:使用 AvroStorage 加载会引发“无法从 loadFunc 获取架构”异常的主要内容,如果未能解决你的问题,请参考以下文章
pig-avro:如何自定义方式,他们 avro 存储加载文件
使用 piggybank 和 AvroStorage 解决 EMR 问题
指向本地文件的 AvroStorage schema_uri 不起作用
猪:无法将 java.lang.String 转换为 org.apache.avro.util.Utf8 与 STORE 中的 AvroStorage