Hive 如何在配置单元中将ansi转换为utf8

Hive 如何在配置单元中将ansi转换为utf8,hive,Hive,我想在配置单元中使用自定义inputformat,我在这里找到了代码: 但是当我完成测试代码时,我发现我想要在配置单元中解析的ftp日志文件是由“ANSI”(“GBK”)编码的,因此结果不能在java控制台中正常显示 那么你能帮我转换代码以确保正常显示吗,谢谢。 您可以使用OmnitureDataFileInputFormat制作一个示例。代码在地址中: . 非常感谢 以下通用UDF可用于将具有GBK字符集的字段转换为UTF-8。 在对该字段进行任何操作之前,应使用此自定义项 public c

我想在配置单元中使用自定义inputformat,我在这里找到了代码: 但是当我完成测试代码时,我发现我想要在配置单元中解析的ftp日志文件是由“ANSI”(“GBK”)编码的,因此结果不能在java控制台中正常显示

那么你能帮我转换代码以确保正常显示吗,谢谢。 您可以使用OmnitureDataFileInputFormat制作一个示例。代码在地址中: .


非常感谢

以下通用UDF可用于将具有GBK字符集的字段转换为UTF-8。 在对该字段进行任何操作之前,应使用此自定义项

public class GUDFTestGBK extends GenericUDF{

private StringObjectInspector oi;

@Override
public ObjectInspector initialize(ObjectInspector [] arguments) throws  UDFArgumentException {
    if (arguments.length != 1) {
        throw new UDFArgumentLengthException(
            "The function GUDFTestGBK(s) takes exactly 1 arguments.");
    }

    converter = ObjectInspectorConverters.getConverter(arguments[0],
        PrimitiveObjectInspectorFactory.writableStringObjectInspector);
    oi = (StringObjectInspector)arguments[0];

    return PrimitiveObjectInspectorFactory.writableStringObjectInspector;
}


@Override
public Object evaluate(DeferredObject [] arguments) throws HiveException{

    try{
        Text str = oi.getPrimitiveWritableObject(arguments[0].get());
        byte [] bytes = str.getBytes();
        String s = new String(bytes, "GBK");
        Text new_str = new Text(s.getBytes("UTF-8"));
        return new_str;
    } catch (Exception e){
        return new Text("Charset conversion failed.");
    }
}

@Override
public String getDisplayString(String[] children){
    return "GBKToUTF8( " + children[0] + " )";
}
}

谢谢,我还没有看到回复。你有办法匹配多行日志信息吗?或者我想用正则匹配做日志异常栈处理,把它整体插入一个表字段中,然后输入到文本中。你有什么解决的方法么?跪求,谢谢。您应该自定义一个特殊的RecordReader,它负责将文件拆分为记录。默认的RecordReader使用“\n”作为记录分隔符。所以,如果您想处理错误堆栈,您必须实现更复杂的逻辑。