【发布时间】:2014-03-18 18:59:01
【问题描述】:
我正在使用 Apache PIG 来减少最初以 CSV 格式存储并希望在 Avro 中输出的数据。我的 PIG 脚本的一部分调用了一个 java UDF,它将一些字段附加到输入元组并将修改后的元组传回。这样做时,我正在修改输出、PIG、架构:
Schema outSchema = new Schema(input).getField(1).schema;
Schema recSchema = outSchema.getField(0).schema;
recSchema.add(new FieldSchema("aircrafttype", DataType.CHARARRAY));
在我的 UDF 的 public Schema outputSchema(Schema input) 方法中。
在exec 方法中,我将java.lang.String 值附加到输入元组并将编辑后的元组返回给PIG 脚本。这以及所有后续操作都可以正常工作。如果我使用PigStorage(',') 输出为 CSV 格式,则没有问题。当我尝试使用
STORE records INTO '$out_dir' USING org.apache.pig.piggybank.storage.avro.AvroStorage('
{
"schema":{
"type":"record", "name":"my new data",
"fields": [
{"name":"fld1", "type":"long"},
{"name":"fld2", "type":"string"}
]}
}');
我收到以下错误:
java.io.IOException: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.avro.util.Utf8
我尝试将字符字段作为char[] 和Utf8 类型附加到元组(在我的UDF 中),但这让PIG 在我试图写出数据之前就生气了。我还尝试修改我的 Avro 架构以允许在每个字段中使用 null 类型。
我正在使用 PIG v0.11.1 和 Avro v1.7.5,非常感谢任何帮助。
【问题讨论】:
标签: java hadoop apache-pig avro