リモート開発メインのソフトウェア開発企業のエンジニアブログです

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
Moba Pro

使い方

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とか使えばいけますが・・・)

← 前の投稿

Elastic Beanstalk 環境を Terraform で構築する

次の投稿 →

個人的な技術習得方法

コメントを残す