从Load Func获取Pig Schema?

时间:2011-12-01 21:03:47

标签: apache-pig

我有一个自定义加载函数,只是扩展了Pig的PigStorage加载函数。我正在寻找类型转换的一些工作,但我需要访问架构,但我不知道如何/在哪里访问pig架构。我不确定您是否需要任何其他信息,但如果您这样做,请告诉我,我很乐意提供。

2 个答案:

答案 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转换为特定类型,您可以在那里进行转换。