【发布时间】:2017-05-19 04:37:36
【问题描述】:
背景: 使用 Hive UDF evaluate() 方法解压列数据
例外:
异常失败 java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: 无法执行方法 public static org.apache.hadoop.io.Text Test.UDFDecompressor.evaluate(java.lang.String) 抛出 org.apache.hadoop.hive.ql.metadata.HiveException 对象 Test.UDFDecompressor@1008df1e 类 Test.UDFDecompressor 与 论据 {x��}kw⸲�_a�����֤�\��a-B�i�@`ï¿½ï¿½ï¿½ï¿½ï¿ ½"�nc3�I����$_�E�� } 大小为 1
源代码:
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.zip.DataFormatException;
import java.util.zip.InflaterInputStream;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.JavaStringObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
public class Decompress extends UDF{
public static String evaluate(String data1) throws IOException, DataFormatException{
ByteArrayInputStream bao=new ByteArrayInputStream(data1.getBytes());
InflaterInputStream iis= new InflaterInputStream(bao);
String out="";
byte[] bt=new byte[1024];
int len=-1;
while ((len =iis.read(bt))!=-1){
out += new String(Arrays.copyOf(bt, len));
}
JavaStringObjectInspector stringInspector;
stringInspector = PrimitiveObjectInspectorFactory.javaStringObjectInspector;
String ip = stringInspector.getPrimitiveJavaObject(out);
//return new String(ip.getBytes(Charset.forName("UTF-8")));
//return new String(ip.getBytes(Charset.forName("UTF-8")));
return ip;
}
}
我尝试了多种使用 gZib、zLIb Java Api 解压缩的方法,但遇到了同样的错误。谁能帮我解决这个问题并建议正确的方法来使用 Hive UDF
解压缩列数据提前致谢。
【问题讨论】:
标签: java hive udf compression