スキップしてコンテンツを表示

GlueでS3出力時にpartitionでパスを分けつつ項目を残す方法

0

Glueのwrite_dynamic_frame.from_optionsでpartitionを分けると出力されたデータからpartitionに使用した項目が除外されます。これを残す方法はありますでしょうか? visual editor でなくcustom transformでコードを記載する必要がありますか?

質問済み 1年前229ビュー
1回答
0

AWS Glueでpartitionを使用してS3に出力する際に、partition に使用した項目を残す方法はあります。ただし、標準のwrite_dynamic_frame.from_optionsメソッドでは、デフォルトでpartition列が出力から除外されてしまいます。

この問題を解決するには、カスタムコードを使用する必要があります。Visual editorだけでは十分な柔軟性がないため、custom transformを使用してPythonコードを記述することをお勧めします。

以下のような方法で実現できます:

  1. まず、DynamicFrameをSparkのDataFrameに変換します。
  2. DataFrameに対して、partitionBy()メソッドを使用してパーティション化します。
  3. 同時に、パーティション列を含むすべての列を選択します。
  4. 最後に、write()メソッドを使用してS3に出力します。

例えば、以下のようなコードになります:

from awsglue.context import GlueContext
from pyspark.context import SparkContext

glueContext = GlueContext(SparkContext.getOrCreate())

# DynamicFrameをDataFrameに変換
df = dynamic_frame.toDF()

# パーティション列を含むすべての列を選択し、パーティション化して書き出し
df.select("*").write.partitionBy("partition_column").parquet("s3://your-bucket/output-path/")

このアプローチを使用することで、パーティション列を出力データに残しつつ、S3のパスを分けることができます。ただし、この方法ではSparkのDataFrameを直接使用するため、AWS Glueの一部の最適化が失われる可能性があることに注意してください。

カスタムコードを使用することで、より細かい制御が可能になり、特定のニーズに合わせてデータ変換プロセスをカスタマイズできます。
Sources
CustomCode - AWS Glue
The DynamicFrame object - AWS Glue
Transform data with custom visual transforms - AWS Glue

回答済み 1年前
  • このやり方ではpartitionの項目は保持されませんでした。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。