package com.twitter.elephantbird.pig.store; import java.io.IOException; import org.apache.hadoop.mapreduce.OutputFormat; import org.apache.pig.data.Tuple; import org.apache.thrift.TBase; import com.twitter.elephantbird.mapreduce.io.ThriftWritable; import com.twitter.elephantbird.mapreduce.output.RCFileThriftOutputFormat; import com.twitter.elephantbird.pig.util.PigToThrift; import com.twitter.elephantbird.util.ThriftUtils; import com.twitter.elephantbird.util.TypeRef; /** * StoreFunc for storing Thrift objects in RCFiles. <p> * * @see RCFileThriftOutputFormat */ public class RCFileThriftPigStorage extends BaseStoreFunc { // add stats? private final TypeRef<? extends TBase<?, ?>> typeRef; private final ThriftWritable<TBase<?, ?>> writable; private final PigToThrift<TBase<?, ?>> pigToThrift; @SuppressWarnings("unchecked") public RCFileThriftPigStorage(String thriftClassName) { typeRef = ThriftUtils.getTypeRef(thriftClassName); pigToThrift = (PigToThrift<TBase<?, ?>>) PigToThrift.newInstance(typeRef); writable = new ThriftWritable(typeRef); } @Override @SuppressWarnings("unchecked") public OutputFormat getOutputFormat() throws IOException { return new RCFileThriftOutputFormat(typeRef); } public void putNext(Tuple t) throws IOException { TBase<?, ?> tObj = pigToThrift.getThriftObject(t); writable.set(tObj); writeRecord(null, writable); } }