본문 바로가기

Mining

Pig UDFs

lzo 파일을 pig에서 사용해야 해서 UDF를 만들어 봤다. 
 -  hadoop에 lzo 설정하기 
 
이전까지 많은 작업들이 약간은(?) 복잡한 알고리즘이 필요한 작업들이라서 java 로 직접 데이터를 만졌었는데, 반복적인 작업들이 필요하게 되면서 pig로 작업을 하는게 편할것 같았다. 

필요한 udf 또한 복잡하지 않고 너무도 간단한 수준이라서 udf에 대해서 자세한 내용은 모르지만 필요한 함수를 만들어 보았다. (elephant-bird 라고 트위터에서 오픈해 놓은 코드가 있는데, 사내에서 사용하기가 어려운 상황..)
 
jython을 이용한 udf는 만들기가 간단해서 활용도가 높을것 같다. 

# Java UDFs - LzoPigStorage  

package xxxxx;

 

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.InputFormat;

import org.apache.hadoop.mapreduce.OutputFormat;

import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

import org.apache.pig.builtin.PigStorage;

import com.hadoop.mapreduce.LzoTextInputFormat;

 

public class LzoPigStorage extends PigStorage {

private String delimiter = null;

 

public LzoPigStorage() {

super();

}

 

public LzoPigStorage(String delimiter) {

super(delimiter);

this.delimiter = delimiter;

}

 

@Override

public InputFormat<LongWritable, Text> getInputFormat() {

return new LzoTextInputFormat();

}

@Override

        public OutputFormat getOutputFormat() {

            return new TextOutputFormat();

        }

}

 

// 사용

register 파일명.jar;

A = load 'data_path' using xxx.LzoPigStorage('\t') AS (.....);

 

# jython 

// string_pig_udf.py

@outputSchema("rquery:chararray")
def rmQuerySpace(instr):
    return instr.replace(' ','')


// 사용
register 'string_pig_udf.py' using jython as myfuncs;
...
C = FOREACH B GENERATE myfuncs.reQuerySpace(query);
 



# 간단히 wiki로도 정리  

'Mining' 카테고리의 다른 글

Data Mining Scrap #1  (0) 2012.07.24
직관, 통찰, 지식, 과학. 끄적끄적..  (0) 2012.05.01
Hadoop Lzo 압축 설정 (2)  (1) 2011.07.19
Hadoop LZO 압축 설정  (0) 2011.07.06
로그 분석  (0) 2011.06.09