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"); } }