Введение
Представьте себе ситуацию, когда вы - морской археолог, исследующий глубины "Золотой бухты - затонувшей". Эта мистическая бухта имеет репутацию скрывать секреты древних цивилизаций, их сокровища и артефакты, потерянные под волнами. Ваша задача - раскрыть эти сокровища и собрать историческую головоломку, скрытую под поверхностью океана.
По мере того, как вы отправляетесь в подводное путешествие, вам нужно анализировать различные артефакты и памятники, которые вы обнаруживаете, тщательно изучая их характеристики и паттерны. Именно здесь на сцену выходят возможности оконных функций Hadoop, позволяющие вам проводить сложный анализ данных и разгадывать тайны прошлого.
Настройка данных
В этом шаге мы создадим набор данных, который имитирует артефакты и памятники, которые вы обнаружили во время подводного исследования. Этот набор данных будет служить основой для нашего анализа с использованием оконных функций Hadoop.
Во - первых, убедитесь, что вы вошли под пользователем hadoop, выполнив следующую команду в терминале:
su - hadoop
Затем создадим новую директорию под названием artifacts внутри директории /home/hadoop:
mkdir /home/hadoop/artifacts
cd artifacts/
Далее создадим новый файл с именем artifacts.txt внутри директории artifacts с следующим содержанием:
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. Мы будем использовать Apache Hive, программное обеспечение для данных-склада, которое облегчает запросы и управление большими наборами данных, хранящимися в распределенном хранилище.
Во - первых, запустите Hive shell, выполнив следующую команду в терминале:
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;
Давайте начнем с исследования столбца age с использованием оконных функций RANK() и DENSE_RANK(). Эти функции помогут нам определить относительные ранги возраста артефактов:
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;
Этот запрос отобразит детали артефактов вместе с возрастами предыдущего и следующего артефактов в упорядоченной последовательности.
Анализ паттернов артефактов
В этом шаге мы будем использовать оконные функции для анализа паттернов и идентификации значимых артефактов по различным критериям.
Давайте начнем с поиска самых старых и самых новых артефактов для каждого типа материала:
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() и затем классифицирует каждый артефакт в зависимости от того, является ли он значительно старше, значительно младше или средним по сравнению с средним возрастом материала.
Резюме
В этом практическом занятии мы исследовали возможности оконных функций Hadoop в рамках подводного археологического экспедиции. Симулируя набор данных артефактов и памятников, мы узнали, как использовать различные оконные функции, такие как RANK(), DENSE_RANK(), LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE() и AVG(), для анализа и выявления паттернов в данных.
С помощью практических упражнений мы приобрели представление о том, как определять ранги возраста, сравнивать возраст последовательных артефактов, искать старые и новые артефакты для каждого типа материала и классифицировать артефакты в зависимости от их возраста по сравнению с средним возрастом материала. Это практическое занятие дало возможность приобрести навыки в использовании оконных функций Hadoop для разгадки загадок "Золотой бухты - затонувшей".
Целью этого практического занятия было сочетание увлекательной постановки задачи с практическими упражнениями по программированию, позволяющее учащимся глубже понять оконные функции Hadoop, исследуя при этом вымышленное приключение. Иммерсируя учащихся в реалистичный контекст, практическое занятие способствовало более интересному и запоминающемуся процессу обучения.



