web-dev-qa-db-ja.com

AWSGlueはパーティション付きの寄木細工を書き込みます

私は寄木細工のフォーマットに書くことができ、次のように列で分割されます:

jobname = args['JOB_NAME']
#header is a spark DataFrame
header.repartition(1).write.parquet('s3://bucket/aws-glue/{}/header/'.format(jobname), 'append', partitionBy='date')

しかし、GlueのDynamicFrameではこれを行うことができません。

header_tmp = DynamicFrame.fromDF(header, glueContext, "header")
glueContext.write_dynamic_frame.from_options(frame = header_tmp, connection_type = "s3", connection_options = {"path": 's3://bucket/output/header/'}, format = "parquet")

AWSのドキュメントによると寄木細工の接着剤はフォーマットオプションをサポートしていないとのことなので、connection_optionsdictの一部としてpartitionByを渡そうとしましたが、それは機能しませんでした。

これは可能ですか、そしてどのように?このようにする理由としては、現在は機能していないので、ジョブのブックマークが機能する必要があると思いました。

6
stewart99

AWSサポートから(少し言い換えると):

現在のところ、寄木細工の床に書き込む場合、GlueはpartitionByパラメーターをサポートしていません。ただし、これは作業中です。

Glue APIを使用して寄木細工に書き込むことは、ジョブのブックマーク機能がS3ソースで機能するために必須です。

そのため、今日の時点では、寄木細工のファイルを分割することはできません[〜#〜]および[〜#〜]ジョブのブックマーク機能を有効にします。

編集:今日(3/23/18)私は ドキュメント で見つけました:

glue_context.write_dynamic_frame.from_options(
frame = projectedEvents,
connection_options = {"path": "$outpath", "partitionKeys": ["type"]},
format = "parquet")

そのオプションは常に存在し、私とAWSサポート担当者の両方がそれを見逃したか、最近追加されたばかりである可能性があります。いずれにせよ、今は可能のようです。

5
stewart99

データフレームのいくつかの列をpartionkeysオブジェクトとして使用します。

glueContext.write_dynamic_frame \
    .from_options(
        frame = some_dynamic_dataframe, 
        connection_type = "s3", 
        connection_options =  {"path":"some_path", "partitionKeys": ["month", "day"]},
        format = "parquet")
0
Dan K