私はHbaseの原子インクリメント列をPigに読み込み、Long値としてアクセスしようとしています。Pig + Hbase原子インクリメント列の値
ただし、列の値は、構造体のようなHbases六角を使用しています:\ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X01
誰にequivilantになるために豚にそれを変換する方法を知っていますget_counter値:1
私は、UDFを使用して解決策を掲載している:
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.backend.executionengine.ExecException;
import org.apache.pig.data.DataByteArray;
import org.apache.pig.data.DataType;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.logicalLayer.schema.Schema;
public class ConvertToLong extends EvalFunc<Long> {
@Override
public Long exec(Tuple input) throws IOException {
if (input == null || input.size() == 0) {
return null;
}
try {
long value = 0;
DataByteArray dba = (DataByteArray)input.get(0);
System.out.println(dba.toString());
byte[] ba = dba.get();
for (int i = 0; i < ba.length; i++)
{
value = (value << 8) + (ba[i] & 0xff);
}
return value;
//return value;
} catch (ExecException e) {
log.warn("Error reading input: " + e.getMessage());
return 3L;
} catch(Exception e){
log.warn("Error:" + e.getMessage());
return 2L;
}
}
@Override
public Schema outputSchema(Schema input) {
return new Schema(new Schema.FieldSchema(null, DataType.LONG));
}
}
でもキャスター= HBaseBinaryConverterせずに、あなたが長いとしてバイト配列を解釈するために使用シンプルなコードを持つことができます::PIG内のすべてのカウンタを一覧表示するには Bytes.toLong(BA)を返しますが、 –