AWS Glue の ETL ジョブで JSON ファイルを処理したいです。
JSON ファイルを別の形式に変換するには、Visual ETL を使用して AWS Glue ETL ジョブを作成します。[データソース] で [JSON] を選択します。[データターゲット] で新しいファイル形式を選択します。[データソース] と [データターゲット] で、[ノードの種類] に [S3] を選択します。
AWS Glue クローラーがネストされた列を読み取る必要がある場合は、JSON 分類子で定義されたカスタム分類子を作成します。次に、新しいAWS Glue クローラーを作成します。カスタム JSON 分類子を新しい AWS Glue クローラーの分類子リストに追加します。
Relationalize 処理を使用してネストされた JSON 列を、お使いの AWS Glue ETL ジョブ内の列に変換します。AWS Glue ETL ジョブ設定のフォーマットオプション値で jsonPath オプションを使用しても対応できます。コード例については、「例: Amazon Simple Storage Service (Amazon S3)から JSON ファイルまたはフォルダを読み取る」を参照してください。
unnest オプションを使用すると、ネストされたフィールドをトップレベルオブジェクトに変換できます。
デフォルトでは、AWS Glue クローラーはデータを単一の配列として扱います。JSON 配列の各レコードに基づくスキーマを作成するには、JSON カスタム分類子を作成します。[JSON パス] に $[*] と入力します。
AWS Glue ETL ジョブを使用して JSON 配列を読み取る際、Apache Spark の explode 関数を使用して配列を行に変換します。詳細については、Spark のウェブサイトで「pyspark.sql.functions.explode」を参照してください。
Spark の to_json 関数を使用しても配列を文字列に変換できます。詳細については、Spark のウェブサイトで「pyspark.sql.functions.to_json」を参照してください。
DynamicFrame のカウントが JSON データソース内のレコード数と一致しない場合、データには不正な形式のレコードが含まれています。次の ErrorSasDynamicFrame コマンドを実行し、データセット内の形式が不正であるレコードを特定します。
# View error fields and error data error_record = dynamicframe_df.errorsAsDynamicFrame().toDF().head()
JSON レコードが複数行にまたがる場合は、AWS Glue ETL ジョブ設定のフォーマットオプションで、multiline の値を true に設定します。デフォルトでは、multiline 値は false に設定されています。