なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Apache PigでShift_JISテキストをUTF-8化

Apache PigでShift_JISテキストをUTF-8

hdfs上にファイルを取り込む際、デフォルトの文字コードUTF-8らしい。
どうやって取り込むか悩んだが、UDFという方法を見つけた。

User Defined Function:UDF

ひしだまさんのサイトに載っている通りEvalFuncを継承するクラスを作成し、exec関数を実装する。

Conv2Utf8
  • このソースをmavenを使ってjarファイル化し、「conv2utf8-1.0-SNAPSHOT.jar」とかにしておく
package your.package.name;

import java.io.IOException;
import org.apache.pig.impl.util.WrappedIOException;

import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;
import org.apache.pig.data.DataType;
import org.apache.pig.data.DataByteArray;

public class Conv2Utf8 extends EvalFunc<String> {

    public String exec(Tuple input) throws IOException {
	if (input == null || input.size() == 0) {
	    return null;
	}
	DataByteArray barray = (DataByteArray) input.get(0);
	byte[] bytes = barray.get();
	return new String(bytes, "MS932");
    }
}
test.pig

REGISTER conv2utf8-1.0-SNAPSHOT.jar

TEMP = LOAD 's3://xxxxx/sample.txt' AS (raw_data:bytearray);
DATA = FOREACH TEMP GENERATE your.package.name.Conv2Utf8(raw_data);

DUMP DATA;

Pigのデータ型

Pig Latin Basics

これを使えばzipファイル等も解凍できるなあと思った