ablog

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

AWS Glue で Amazon S3 にある CSV を Amazon DynamoDB にロードする

AWS Glue の Spark ジョブで Amazon S3 にある CSVAmazon DynamoDB にロードしてみた。

  • src_table.csv を作成する。
x
y
z
  • src_table.csv を S3 バケットにアップロードする。
  • AWS Glue のクローラでアップロードした CSV をクロールしてテーブルを作成する。
  • Glue Spark ジョブを作成する。
    • ジョブ名: csv2ddb_job
    • Type: Spark
    • Glue Version: Spark 2.4, Python 3 (Glue Version 2.0)
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

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "test", table_name = "test_src_table_csv", transformation_ctx = "datasource0")

applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [("key", "string", "key", "string")], transformation_ctx = "applymapping1")

datasink2 = glueContext.write_dynamic_frame_from_options(
    frame=applymapping1,
    connection_type="dynamodb",
    connection_options={
        "dynamodb.output.tableName": "src_table",
        "dynamodb.throughput.write.percent": "1.0"
    }
)

job.commit()
  • 作成したジョブを実行すると DynamoDB のテーブルにデータがロードされた。