我创建了一个mapreduce代码来分析一些文件。但有些文件是从Hive创建的,它们是ORC类型的。
有没有可能像分析文本文件一样分析这个ORC文件?mapreduce的输出是文本类型吗?
tks
发布于 2015-09-01 01:03:18
您需要的是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();https://stackoverflow.com/questions/32227434
复制相似问题