1

いくつかのファイルを分析する mapreduce コードを作成しました。ただし、一部のファイルは Hive から作成され、それらは ORC タイプです。

この ORC ファイルを Texfile のように解析できますか? 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();

次に、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();
于 2015-08-31T17:03:18.100 に答える