Hadoop を使って古代の宝を発見する

HadoopBeginner
オンラインで実践に進む

はじめに

「沈没宝湾」の深さを探索する海洋考古学者であるシナリオを想像してみてください。この神秘的な湾には、古代文明の秘密や、波の下に失われた宝や遺物が眠っていると噂されています。あなたの目標は、これらの宝を発見し、海の表面下に隠された歴史的なパズルを組み立てることです。

あなたが水中探査に乗り出すとき、あなたが発見するさまざまな遺物や遺品を分析し、それらの特徴やパターンを慎重に研究する必要があります。ここでは、Hadoop Window 関数の力が発揮され、複雑なデータ分析を行い、過去の謎を解き明かすことができます。

データのセットアップ

このステップでは、水中探査中に発見した遺物や遺品をシミュレートするデータセットを作成します。このデータセットは、Hadoop Window 関数を使用した分析の基盤となります。

まず、ターミナルで以下のコマンドを実行して、hadoop ユーザーとしてログインしてください。

su - hadoop

次に、/home/hadoop ディレクトリ内に artifacts という新しいディレクトリを作成しましょう。

mkdir /home/hadoop/artifacts
cd artifacts/

次に、artifacts ディレクトリ内に以下の内容を持つ artifacts.txt という新しいファイルを作成します。

1,Gold,2500,15,A1
2,Silver,1800,20,B2
3,Bronze,3000,12,A1
4,Ceramic,1200,18,C3
5,Gold,2800,22,B2
6,Silver,2000,16,A1
7,Bronze,2500,25,C3
8,Ceramic,1500,14,A1
9,Gold,3200,21,B2
10,Silver,1700,19,C3

このファイルは、材料、年代、発見された深さ、および位置座標などの詳細を持つ遺物のコレクションを表しています。

ウィンドウ関数を使ったデータの探索

データセットが準備できたので、Hadoop Window 関数を使って探索してみましょう。分散ストレージに格納されている大規模なデータセットの照会と管理を容易にするデータウェアハウスソフトウェアである Apache Hive を使います。

まず、ターミナルで以下のコマンドを実行して Hive シェルを起動します。

hive

次に、データセットを格納するための新しいテーブル artifacts を作成します。

CREATE TABLE artifacts (
  artifact_id INT,
  material STRING,
  age INT,
  depth INT,
  location STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

artifacts.txt ファイルからのデータを artifacts テーブルに読み込みます。

LOAD DATA LOCAL INPATH '/home/hadoop/artifacts/artifacts.txt' INTO TABLE artifacts;

RANK() 関数と DENSE_RANK() 関数を使って age 列を探索してみましょう。これらの関数は、遺物の相対的な年代順位を特定するのに役立ちます。

SELECT
  artifact_id,
  material,
  age,
  RANK() OVER (ORDER BY age DESC) AS rank_age,
  DENSE_RANK() OVER (ORDER BY age DESC) AS dense_rank_age
FROM
  artifacts;

この照会は、RANK() 関数と DENSE_RANK() 関数に基づいた遺物の詳細とその年代順位を出力します。

次に、LAG() 関数と LEAD() 関数を使って、連続する遺物の年代を比較しましょう。

SELECT
  artifact_id,
  material,
  age,
  LAG(age, 1) OVER (ORDER BY age DESC) AS prev_age,
  LEAD(age, 1) OVER (ORDER BY age DESC) AS next_age
FROM
  artifacts;

この照会は、並べ替えられたシーケンスにおける前の遺物と次の遺物の年代とともに、遺物の詳細を表示します。

遺物のパターンの分析

このステップでは、window 関数を使ってパターンを分析し、さまざまな基準に基づいて重要な遺物を特定します。

まず、各材料の種類ごとに最古の遺物と最新の遺物を見つけましょう。

CREATE TABLE result_1
AS
SELECT
  material,
  artifact_id,
  age,
  FIRST_VALUE(artifact_id) OVER (PARTITION BY material ORDER BY age DESC) AS oldest_artifact,
  LAST_VALUE(artifact_id) OVER (PARTITION BY material ORDER BY age ASC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS newest_artifact
FROM
  artifacts;

SELECT * FROM result_1;

この照会では、FIRST_VALUE() 関数と LAST_VALUE() 関数を使用して、それぞれ各材料の種類について最古の遺物と最新の遺物を特定しています。

次に、その材料の種類の平均年齢と比較して、かなり古いか若い遺物を見つけましょう。

CREATE TABLE result_2
AS
SELECT
  artifact_id,
  material,
  age,
  AVG(age) OVER (PARTITION BY material) AS avg_age_by_material,
  CASE
    WHEN age > AVG(age) OVER (PARTITION BY material) + 200 THEN 'Significantly Older'
    WHEN age < AVG(age) OVER (PARTITION BY material) - 200 THEN 'Significantly Younger'
    ELSE 'Average'
  END AS age_category
FROM
  artifacts;

SELECT * FROM result_2;

この照会では、AVG() window 関数を使用して各材料の種類の平均年齢を計算し、その後、各遺物をその材料の平均年齢と比較して、かなり古い、かなり若い、または平均的なものに分類しています。

まとめ

この実験では、海洋考古学の探査の文脈における Hadoop Window 関数の力を探索しました。遺物や遺品のデータセットをシミュレートすることで、RANK()DENSE_RANK()LAG()LEAD()FIRST_VALUE()LAST_VALUE()AVG() などのさまざまな window 関数をどのように活用するかを学び、データ内のパターンを分析して明らかにする方法を学びました。

実践的な演習を通じて、年代順位を特定し、連続する遺物の年代を比較し、各材料の種類について最古の遺物と最新の遺物を見つけ、材料の平均年齢と比較した遺物の年代に基づいて遺物を分類することについての洞察を得ました。この実験は、Hadoop Window 関数を使って「沈没宝湾」の謎を解き明かすための実践的で魅力的な経験を提供しました。

この実験の設計は、魅力的なシナリオと実践的なコーディング演習を結合することを目的としており、架空の冒険を探検しながら Hadoop Window 関数をより深く理解するように学習者に促します。学習者を現実的なコンテキストに浸し、より魅力的で記憶に残る学習体験を促進しました。