いくつかのファイルを分析する mapreduce コードを作成しました。ただし、一部のファイルは Hive から作成され、それらは ORC タイプです。
この ORC ファイルを Texfile のように解析できますか? mapreduce の出力は Text 型になりますか?
tks
必要なのは、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();
次に、ORC ファイルのフィールドにアクセスするための StructObjectInspector が必要です。
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();