parquet-toolsでApache Parquet形式のファイルをローカルでお手軽に確認する

parquet-toolsでApache Parquet形式のファイルをローカルでお手軽に確認する

  • 投稿者:

こんにちは、皆さんお久しぶりです。最後のエントリからだいぶ期間が空いてしまいましたが、これからちょくちょくまた書いていきますので宜しくお願いします。

さて今回ですが、小ネタになってしまい恐縮ですが、タイトルの通りApache Parquetのファイルをローカルで手軽に確認できるparquet-toolsの紹介をしようと思います。

parquet-tools

https://github.com/apache/parquet-mr/tree/master/parquet-tools

まさに今回の要件を満たしてくれるツールになります。基本的にParquetを使う際は巨大なデータになる事が多いのでHadoopのクラスタを立ち上げて確認する事が多いのですが、ごく小さい単一のParquet等、クラスタを立ち上げるまでもない時に便利かもしれません。

Javaでできているようで、使用するには自前でコンパイルするか、macOSのユーザーであればHomebrewでインストールが可能です。僕はHomebrewを使いました:

brew install parquet-tools

使い方

parquet-tools を実行するとusageが表示されます。以下はざっくりとしたまとめですがこのようなサブコマンドがあるようです:

parquet-tools cat: Parquetの行を全件出力。メタデータは表示されない
parquet-tools head: 最初のn行を出力
parquet-tools schema: スキーマ情報を出力
parquet-tools meta: メタデータを出力
parquet-tools dump: メタデータと行の全件を出力
parquet-tools merge: 複数のParquetファイルをマージする
parquet-tools rowcount: 行数を出力する
parquet-tools size: Parquetファイルのサイズを出力

今回のケースで使いそうなのは cat, rowcount, schema くらいなのでこれらを試してみましょう。

まずは schema から (対象ファイルはsnappy圧縮されていましたが大丈夫でした):

$ parquet-tools schema ~/Downloads/part-00000-xyz.snappy.parquet

message spark_schema {
  optional int32 user_id;
  optional binary name (UTF8);
  optional binary birthdate (UTF8)
  optional int32 gender;
}

次に行数を見てみます:

$ parquet-tools rowcount ~/Downloads/part-00000-xyz.snappy.parquet

Total RowCount: 8

ではいよいよ cat で中身を見てみましょう:

$ parquet-tools cat ~/Downloads/part-00000-xyz.snappy.parquet

user_id = 1
name = Jiro Yamada
birthdate = 1990-01-12
gender = 1

user_id = 2
name = Taro Tanaka
birthdate = 1987-11-12
gender = 2

...

user_id = 8
name = Shiro Kimura
birthdate = 1978-09-29
gender = 1

cat--json オプションでJSON出力も可能です:

$ parquet-tools cat --json ~/Downloads/part-00000-xyz.snappy.parquet

{"user_id":1,"name":"Jiro Yamada","birthdate":"1990-01-12","gender":1}
{"user_id":2,"name":"Taro Tanaka","birthdate":"1987-11-12","gender":2}
...
{"user_id":8,"name":"Shiro Kimura","birthdate":"1978-09-29","gender":1}

まとめ

と言う訳で、parquet-toolsを使った小さなParquetファイルの中身の確認方法を紹介しました。あまり使う頻度は高くないかと思いますが、ローカルでさくっと確認したい時にいかがでしょうか。個人的にはcatがCSV出力に対応しているともっと便利だと思いました(jqとか使えばいけますが・・・)

we are hiring

優秀な技術者と一緒に、好きな場所で働きませんか

株式会社もばらぶでは、優秀で意欲に溢れる方を常に求めています。働く場所は自由、働く時間も柔軟に選択可能です。

現在、以下の職種を募集中です。ご興味のある方は、リンク先をご参照下さい。

コメントを残す