目的
OSMの全球データをSparkあたりで処理したいな、のための前処理です。
Apache Parquetというデータ形式に、Open Street MapのPBF形式から変換します。
osm-parquetizerを使う
世の中にはだいたい同じようなことを考えてはるか先に進んでいる先人がいるものです。
OSMのPBFをSparkで処理できないか調査していたら、adrianulbona/osm-parquetizerというリポジトリを見つけました。まさに、PBF形式を、Apache Parquetというカラム志向のデータ形式に変換するものです。
今回は、これを使ってみましょう。
環境はUbuntu19.10を手元のVMに用意しました。
aptで必要なものを入れます。
apt install default-jdk git maven
そして、Githubからリポジトリをクローンします。
git clone git@github.com:adrianulbona/osm-parquetizer.git
ビルドします。
cd osm-parquetizer/
mvn clean package
試しに、東京だけを切り出したPBFファイルで試してみます。
java -Xmx768M -jar target/osm-parquetizer-1.0.1-SNAPSHOT.jar ../../Tokyo.osm.pbf
suguru@thermosphere:~/repo/osm-parquetizer$ ls -lh ~
total 136M
drwxrwxr-x 3 suguru suguru 4.0K Nov 28 17:51 repo
-rw-rw-r-- 1 suguru suguru 30M Nov 22 19:26 Tokyo.osm.pbf
-rw-r--r-- 1 suguru suguru 78M Dec 4 17:03 Tokyo.osm.pbf.node.parquet
-rw-r--r-- 1 suguru suguru 493K Dec 4 17:03 Tokyo.osm.pbf.relation.parquet
-rw-r--r-- 1 suguru suguru 29M Dec 4 17:03 Tokyo.osm.pbf.way.parquet
変換されています。
実際にやってみたところ、Java実行時の最大ヒープ量を設定する-Xmxで768MByteを指定しないと、OutOfMemoryで完了しませんでした。
思った以上にメモリを食いそうなので、全球データが実行できるか不安です。
今後
ParquetをSparkで処理するのをやってみる。