1

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

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

tks

4

1 回答 1

1

你需要的是 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();
于 2015-08-31T17:03:18.100 回答