首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取ORC文件的Mapreduce示例

读取ORC文件的Mapreduce示例
EN

Stack Overflow用户
提问于 2015-08-26 21:03:36
回答 1查看 1.9K关注 0票数 1

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

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

tks

EN

回答 1

Stack Overflow用户

发布于 2015-09-01 01:03:18

您需要的是InputFormat OrcNewInputFormat或OrcInputFormat。

代码语言:javascript
复制
job.setInputFormatClass(OrcNewInputFormat.class);

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

代码语言:javascript
复制
private final String ts = "struct<" +
        "recordId:bigint," +
        "name:string," +
        "language:string>";   

private final StructTypeInfo ti = (StructTypeInfo) TypeInfoUtils.getTypeInfoFromTypeString(ts);

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

代码语言:javascript
复制
List<TypeInfo> type_lst = ti.getAllStructFieldTypeInfos();
List<String> field_lst = ti.getAllStructFieldNames();

接下来,您需要一个StructObjectInspector来访问ORC文件中的字段

代码语言:javascript
复制
    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();
    }

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

代码语言:javascript
复制
        rowId = value_lst.get(0).toString();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32227434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档