ablog

不器用で落着きのない技術者のメモ

Glueジョブで GeoPy を使ってみた

Glueジョブで Python ライブラリ GeoPy を使えることを確認したメモ。

GeoPy を zip で圧縮して S3 バケットにアップロードする

  • GitHub - geopy/geopy: Geocoding library for Python. から [Clone or download] で [Download ZIP] を選択して、ダウンロードする。
  • ダウンロードした geopy-master.zip を解凍して、geopy-master 以下の geopy を zip で圧縮する。
  • S3 バケットを作成して geopy.zip をアップロードする。
    • "s3://yoheia-glue-lib/python/geopy.zip" というパスにアップロードしたとする。

Glue ジョブを作成する

  • ジョブ作成時に [セキュリティ設定、スクリプトライブラリおよびジョブパラメータ (任意)] で、zip のパスを指定する。
    • Python ライブラリパス: s3://yoheia-glue-lib/python/geopy.zip
  • スクリプト
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql import SQLContext
from pyspark.sql.functions import year, month, date_format

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init('GeoPy Test Job')

from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.reverse("52.509669, 13.376294")
print(location.address)

実行してみる

  • 実行して、CloudWatch Logs で確認する。
    • ロググループ/aws-glue/jobs/outputjr_f1...
2020-03-24 12:35:25,602 WARN  [Thread-9] utils.ApacheUtils (ApacheUtils.java:noSuchMethodThrownByNormalizeUriInvoker(246)) - NoSuchMethodException was thrown when disabling normalizeUri. This indicates you are using an old version (< 4.5.8) of Apache http client. It is recommended to use http client version >= 4.5.9 to avoid the breaking change introduced in apache client 4.5.7 and the latency in exception handling. See https://github.com/aws/aws-sdk-java/issues/1919 for more information
Steinecke, Potsdamer Platz, Tiergarten, Mitte, Berlin, 10785, Deutschland
2020-03-24 12:35:27,236 INFO  [Driver] yarn.ApplicationMaster (Logging.scala:logInfo(54)) - Final app status: SUCCEEDED, exitCode: 0
2020-03-24 12:35:27,238 INFO  [pool-4-thread-1] spark.SparkContext (Logging.scala:logInfo(54)) - Invoking stop() from shutdown hook
2020-03-24 12:35:27,242 INFO  [pool-4-thread-1] server.AbstractConnector (AbstractConnector.java:doStop(318)) - Stopped Spark@4ebbc3b6{HTTP/1.1,[http/1.1]}{0.0.0.0:0}
2020-03-24 12:35:27,244 INFO  [pool-4-thread-1] ui.SparkUI (Logging.scala:logInfo(54)) - Stopped Spark web UI at 

参考

純粋な Python で書かれていれば、AWS Glue ETL スクリプトPython 拡張モジュールおよびライブラリを使用できます。pandas などの C ライブラリは現在のところサポート外です。他の言語で書かれた拡張機能も同様です。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-python-libraries.html