DEA / ドメイン1 データの取り込みと変換
データエンジニアリングのプログラミング
データエンジニアは、 でデータを集計し、Python や Scala で変換処理を書き、シェルスクリプトで作業を自動化します。どの言語をどの場面で使うか、どんなデータ構造とアルゴリズムが処理の速さを決めるかを知っていると、取り込みと変換のランタイムを短くできます。
DEA では、言語とフレームワークの使いどころ、データ構造 (グラフ、ツリー、ハッシュ) の考え方、コードの最適化、そして生成 AI によるコーディング支援 () が問われます。
Point
- Framework = 枠組み です。Apache Spark のように、分散処理などの共通の仕組みを提供し、利用者は処理の中身だけを書けばよい土台を指します。
- Algorithm = 計算の手順 です。同じ結果でも、手順の選び方で処理時間が大きく変わります。
- 和訳
- Algorithm: 算法、アルゴリズム
- Weblio英和辞書「algorithm」
概要
データパイプラインのどこで、どの言語を使うかを整理します。
| 言語 | 主な使いどころ | AWS での例 |
|---|---|---|
| 集計、結合、フィルター、テーブルの作成 | 、、 の SQL、 の Hive / | |
| Python | 変換、 呼び出し、自動化、の前処理 | Glue (PySpark、Python shell)、、 の 、boto3 |
| Scala | Spark のネイティブ言語。型があり、JVM 上で高速 | Glue の Scala ジョブ、EMR の Spark アプリケーション |
| Java | や のアプリケーション、 | 、 のコンシューマー |
| R | 統計解析と可視化 | のノートブック |
| Bash / PowerShell | ファイル操作、CLI の実行、定型作業の自動化 | のスクリプト、EMR のブートストラップアクション、MWAA の起動スクリプト |
主要技術
①言語とフレームワークの選び方 ⚠️ 頻出
| 要件 | 選ぶもの | 理由 |
|---|---|---|
| テーブルのデータを集計・結合したい | 宣言的で、 や のエンジンが実行計画を最適化します。 | |
| 大量データを分散して変換したい | PySpark (、) | Python で書け、 が並列に処理します。 |
| Spark で型安全に、性能を突き詰めたい | Scala | Spark 自体が Scala で書かれています。 |
| 小さなファイルの軽い変換、 の呼び出し | Python (、Glue Python shell) | 起動が軽く、ライブラリが豊富です。 |
| ストリームの状態を持つ処理 | Java / Python の アプリケーション | で動かします。 |
| 定型のファイル移動やコマンド実行 | Bash / PowerShell | 短いスクリプトで自動化できます。 |
同じ処理を SQL で書けるなら、まず SQL を考えます。Spark でも、DataFrame や Spark SQL で書くと、オプティマイザーが述語のプッシュダウンや結合の方法を自動で選びます。行ごとに Python の関数 (UDF) を呼ぶ書き方は、組み込み関数よりも遅くなりがちです。
②データ構造とアルゴリズム
データ構造は、データの持ち方です。持ち方によって、探す、足す、並べる操作の速さが変わります。
| データ構造 | 形 | 得意なこと | データエンジニアリングでの例 |
|---|---|---|---|
| 配列・リスト | 順番に並べたもの | 先頭から順に読む | ファイルの行を順に処理する |
| ハッシュテーブル (辞書) | キーから位置を計算して置く | キーでの検索がほぼ一定時間 | 重複の判定、結合 (ハッシュ結合)、 のによる振り分け |
| ツリー (木構造) | 親と子の階層 | 範囲の検索、並べ替えた状態の維持 | データベースの B ツリーのインデックス、 や XML の入れ子、ディレクトリの階層 |
| グラフ | 点 (ノード) と線 (エッジ) | つながりの探索 | の友人関係、不正検知のつながり、、 によるワークフロー ( で格納) |
| キュー | 先に入れたものを先に出す | 順番待ちの処理 | 、 のタスクのキュー |
Point
- Hash = 細かく刻む の意味です。キーから決まった計算で番号 (ハッシュ値) を作り、その番号の場所に置くことで、探す手間を省きます。
- Graph はここでは「グラフ理論のグラフ」で、棒グラフではありません。点と線でつながりを表す構造です。
- Tree は1つの根から枝分かれしていく階層構造です。輪 (閉路) はありません。
アルゴリズムの速さは、データ量 n が増えたときに処理時間がどう増えるかで比べます。
| 処理 | 単純なやり方 | 速いやり方 |
|---|---|---|
| 2つのデータセットの結合 | 全組み合わせを比べる (n × m) | 小さい方をハッシュテーブルにして照合する (ハッシュ結合)、小さい方を全ノードに配る () |
| 重複の除去 | 全件と比べる | ハッシュで判定する |
| 範囲の検索 | 全件を読む | 並べ替え済みのデータやツリーのインデックスを使う、パーティションで読む範囲を絞る |
| 依存関係のある処理の実行順 | 登録した順に実行する | 処理をノード、依存をエッジとする有向グラフにし、トポロジカルソートで順序を決める (順序が求まらなければ循環がある) |
③取り込みと変換のランタイムを短くするコード
| 手法 | 内容 |
|---|---|
| 読む量を減らす | 必要な列だけを読む (列指向の )、パーティションとで必要な範囲だけを読みます。 |
| 早めに絞る | 結合や集計の前にフィルターをかけ、扱う行を減らします。 |
| 結合を工夫する | 小さいテーブルはにし、 (ノード間のデータの移動) を減らします。 |
| 組み込み関数を使う | 行ごとの Python の UDF より、 の組み込み関数や を使います。 |
| まとめて呼ぶ | や への書き込みは、1件ずつではなくバッチ (BatchWriteItem など) で行います。 |
| 少しずつ読む | 大きなファイルは全体をメモリに載せず、ストリームとして少しずつ読んで処理します (boto3 の get_object の本文を iter_lines で読むなど)。 |
| 並列にする | では接続や のクライアントをハンドラーの外で作って再利用し、Spark ではパーティション数を調整します。応答の待ちが中心の API の呼び出しは、相手の同時接続の制限の範囲で並行に送ります。 |
| ファイルの数を整える | 小さなファイルを大量に作らないよう、出力のパーティション数を調整します (#20)。 |
④Amazon Q Developer によるコードの生成と最適化
は、生成 AI でコードの作成、説明、最適化、テストの作成を手伝う AWS のアシスタントです。データエンジニアリングでは、 や PySpark のコードの生成、既存のコードの説明と改善案、AWS のサービスについての質問に使えます。 Studio のノートブックや Unified Studio でも、生成 AI によるコードの生成を使えます。
ただし、利用できる形には変化があります。Amazon Q Developer の IDE プラグインは、2026 年 5 月 15 日から新規のサインアップを受け付けておらず、2027 年 4 月 30 日にサポートを終了します。AWS は IDE でのコーディング支援の後継として (エージェント型の IDE と CLI) を案内しています。の中の Amazon Q Developer のチャットは、この終了の対象外です。
試験の問題文では「」「Amazon Q Developer」と書かれることがあります。その場合は、「生成 AI でコードの生成・説明・最適化を支援するサービス」として読み、社内文書の検索に使う (新規受付を終了) と区別します。
試験対策
①判断マトリクス
| 問題文のキーワード | 選ぶもの | 理由 |
|---|---|---|
| のデータを集計・結合 | ( / ) | 宣言的で、エンジンが最適化します。 |
| 大量データの分散変換を Python で | PySpark ( / ) | が並列に処理します。 |
| 定型のファイル操作や CLI の実行を自動化 | Bash / PowerShell のスクリプト | 短いスクリプトで済みます。 |
| つながりの探索 (友人関係、不正のネットワーク) | グラフのデータ構造 () | ノードとエッジで関係を表します。 |
| 階層や範囲の検索 | ツリー (B ツリーのインデックスなど) | 並べ替えた状態で範囲を探せます。 |
| キーで高速に探す、重複を判定する | ハッシュテーブル | キーの検索がほぼ一定時間です。 |
| 大きいテーブルと小さいテーブルの結合が遅い | を避けられます。 | |
| コードの生成・説明・最適化を生成 AI で支援 | (IDE での支援の後継は ) | 自然な文章でコードを作成・改善できます。 |
②よくある誤答
- 集計を Python のループで書くこと。 や の組み込み関数の方が速く、短く書けます。
- グラフとツリーを同じものと考えること。ツリーは輪のない階層、グラフは任意のつながりです。
- 社内文書の検索に を選ぶこと。Q Developer はコーディングの支援です。