Mapreduce读取ORC文件的例子



我创建了一个mapreduce代码来分析一些文件。但是有些文件是从Hive中创建的,并且是ORC类型的。

有可能像分析文本文件一样分析这个ORC文件吗?mapreduce的输出是Text类型吗?

谢谢

您需要的是InputFormat OrcNewInputFormat或OrcInputFormat

job.setInputFormatClass(OrcNewInputFormat.class);

然后需要一个Typestruct,它描述表的模式(很可能在映射器中)

private final String ts = "struct<" +
        "recordId:bigint," +
        "name:string," +
        "language:string>";   
private final StructTypeInfo ti = (StructTypeInfo) TypeInfoUtils.getTypeInfoFromTypeString(ts);

您可以像这样获取类型信息和列名

List<TypeInfo> type_lst = ti.getAllStructFieldTypeInfos();
List<String> field_lst = ti.getAllStructFieldNames();

接下来你需要一个StructObjectInspector来访问你的ORC文件

的字段
    StructObjectInspector soi;
    Properties properties = new Properties();
    properties.setProperty("columns.typtes", ts);
    serde.initialize(context.getConfiguration(), properties);
    try {
        obj = serde.deserialize(value);
        soi = (StructObjectInspector)serde.getObjectInspector();
        value_lst = soi.getStructFieldsDataAsList(obj);
    } catch (SerDeException e) {
        e.printStackTrace();
    }

现在你可以像这样访问你的文件的字段

        rowId = value_lst.get(0).toString();

相关内容

  • 没有找到相关文章

最新更新