我有一个自定义加载函数,只是扩展了Pig的PigStorage加载函数。我正在寻找类型转换的一些工作,但我需要访问架构,但我不知道如何/在哪里访问pig架构。我不确定您是否需要任何其他信息,但如果您这样做,请告诉我,我很乐意提供。
答案 0 :(得分:5)
您需要实现LoadMetadata接口并从getSchema方法提供架构详细信息。你必须在那里工作:
org.apache.pig.ResourceSchema;
org.apache.pig.data.DataType;
org.apache.pig.impl.logicalLayer.schema.Schema;
org.apache.pig.impl.logicalLayer.schema.Schema.FieldSchema;
定义加载函数的架构。
public ResourceSchema getSchema() {
List<FieldSchema> fieldSchemaList = new ArrayList<FieldSchema>();
fieldSchemaList.add( new FieldSchema("column_name1", org.apache.pig.data.DataType.CHARARRAY) );
fieldSchemaList.add( new FieldSchema("column_name2", org.apache.pig.data.DataType.CHARARRAY) );
fieldSchemaList.add( new FieldSchema("column_name3", org.apache.pig.data.DataType.CHARARRAY) );
return new ResourceSchema( new Schema(fieldSchemaList) );
}
答案 1 :(得分:3)
Pig无法可靠地为LoadFunc提供用户定义的架构。如果您实施LoadPushdown,并且只需要一些字段,您将收到一个电话,指出需要哪些字段;但这只是在投影发生的情况下,因此您不能依赖于100%的用例。
要使用类型转换,您可以实现自定义LoadCaster接口;它将用于从bytearrays转换为特定类型,您可以在那里进行转换。