Получение схемы Pig от Load Func? - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть пользовательская функция загрузки, которая просто расширяет функцию загрузки Pig's PigStorage. Я хочу поработать с приведением типов, но мне нужен доступ к схеме, но я не уверен, как / где получить доступ к схеме pig. Я не уверен, нужна ли вам какая-либо дополнительная информация, но если вы захотите, дайте мне знать, и я с радостью предоставлю ее.

Ответы [ 2 ]

5 голосов
/ 16 января 2012

Вам нужно будет реализовать интерфейс 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) );
}
3 голосов
/ 04 декабря 2011

Свинья не обеспечивает надежную пользовательскую схему для LoadFunc.Если вы реализуете LoadPushdown, и необходимы только некоторые поля , вы получите вызов, который указывает, какие из полей являются обязательными;но это только в том случае, если проекция происходит, поэтому вы не можете полагаться на нее в 100% случаев.

Чтобы поиграть с типизацией, вы можете реализовать собственный интерфейс LoadCaster;он будет использоваться для перевода из байтовых массивов в определенные типы, и вы сможете делать там свои преобразования.

...