EmbulkのSequenceFile読み込みのメモ。
|
|
HadoopのSequenceFileを読み込むパーサープラグインを作ってみた。
プラグイン名はembulk-parser-hadoop-seqfile。
このプラグインはEmbulk 0.10以降で、Java8以降に対応。
ただしJava8の場合、jre1.8には対応しておらず、jdk1.8のjavaコマンドを使用する必要がある。
(Embulk用のWritableクラスを生成する為にToolProvider.getSystemJavaCompiler()を使っているんだけど、jre1.8ではこれがnullを返すので使えない)
Java9以降では使用できるらしい(Java11で動作確認済み)。
読み込む元のファイルはファイル入力プラグイン(ローカルファイルとか)で指定する。
このプラグインを使う為には、embulk-parser-hadoop-seqfileプラグインをインストールしておく必要がある。
Embulk 0.10以降ではgemを使わないインストール方法になった。以下のようにしてインストールする。
(この例では、バージョンは0.1.0。最新バージョンはMavenセントラルリポジトリーで確認できる)
Embulk 0.10〜0.11.2の場合 $ export m2_repo=〜 $ mvn dependency:get -Dartifact=io.github.hishidama.embulk:embulk-parser-hadoop-seqfile:0.1.0 Embulk 0.11.3以降の場合 [2023-06-02] $ java -jar embulk-0.11.3.jar install io.github.hishidama.embulk:embulk-parser-hadoop-seqfile:0.1.0
$HOME/.embulk/embulk.properties
、Windowsの場合は%USERPROFILE%\.embulk\embulk.properties
)に設定を追加する。
plugins.parser.hadoop_seqfile=maven:io.github.hishidama.embulk:hadoop-seqfile:0.1.0
key: Text, value: IntWritbleのSequenceFileを読み込む例。
in: type: file path_prefix: /tmp/example/wordcount.dat parser: type: hadoop_seqfile key_class: org.apache.hadoop.io.Text value_class: org.apache.hadoop.io.IntWritable columns: - {name: word, type: string, key: true, wtype: text} - {name: count, type: long, key: false, wtype: int} out: type: stdout
key_classとvalue_classでSequenceFileのキークラス名と値クラス名を指定する。
これはSequenceFile内に保持されているクラス名と一致しなければならない。
columnsの「key: true」でキーのカラム名とデータ型を指定する。
「key: false」で値のカラム名とデータ型を指定する。
wtypeでSequenceFileのWritableのデータ型を指定する。textはTextで、intはIntWritable。
ただ、実のところ、key_classとvalue_classがシンプルな(1カラム分の)Writableクラスの場合は、wtypeは無視され、key_class・value_classで指定したWritableがそのまま使われる。
key: NullWritable, value: Asakusa FrameworkのデータモデルのSequenceFileを読み込む例。
in: type: file path_prefix: /tmp/example/datamodel.dat parser: type: hadoop_seqfile value_class: com.example.asakusafw.dmdl.model.WordCount columns: - {name: word, type: string, wtype: stringOption} - {name: count, type: long, wtype: intOption} out: type: stdout
key_class(およびvalue_class)は、NullWritableの場合は省略できる。
値用のcolumnsの「key: false」も省略可能。
Asakusa Frameworkのデータモデルクラスの各フィールドはWritableクラスになっている。
wtypeのstringOptionがAsakusaFWのStringOptionクラス、intOptionはIntOptionクラス。