Введение
В будущем на серии опасных трасс по вселенной проводится высоко ставочный межгалактический турнир по гонкам. В качестве офицера безопасности космических гонок ваша главная ответственность заключается в обеспечении безопасности и справедливости этих космических заездов путём тщательного мониторинга трасс и участвующих в гонках космических кораблей.
Миссия заключается в анализе телеметрических данных, собранных с различных участков трасс, для выявления потенциальных опасностей, нарушений правил трассы и оптимизации опыта гонок как для участников, так и для зрителей. Используя мощные возможности обработки данных Hadoop, вы можете выявить ценные инсайты, которые помогут сохранить честность и интересность космических заездов.
Изучите функции работы с коллекциями в Hive
В этом шаге вы узнаете, как использовать функции работы с коллекциями в Hive для обработки и анализа телеметрических данных, собранных с трасс.
Во - первых, убедитесь, что вы вошли под пользователем hadoop, выполнив следующую команду в терминале:
su - hadoop
Затем создадим примерный набор данных для работы. Откройте текстовый редактор и создайте новый файл с именем racetrack_data.txt с таким содержанием:
1,Sector1,Benny,32.5,12.7,45.2
2,Sector2,Zara,28.9,14.1,43.0
3,Sector1,Alex,30.2,11.5,41.7
4,Sector3,Benny,35.7,10.2,45.9
5,Sector2,Zara,31.1,12.8,43.9
6,Sector3,Alex,29.8,15.7,45.5
Данный набор данных представляет телеметрические данные из различных секторов трассы, где столбцы представляют идентификатор записи, имя сектора, имя гонщика, скорость, высота и общий балл.
Теперь запустим Hive CLI:
hive
Далее создадим новую таблицу Hive для хранения этих данных:
CREATE TABLE racetrack_data (
id INT,
sector STRING,
racer STRING,
speed DOUBLE,
altitude DOUBLE,
total_score DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
Загрузим данные из файла racetrack_data.txt в таблицу Hive:
LOAD DATA LOCAL INPATH '/home/hadoop/racetrack_data.txt' OVERWRITE INTO TABLE racetrack_data;
Теперь изучим некоторые функции работы с коллекциями в Hive:
- Получить список уникальных имен гонщиков.
SELECT DISTINCT racer FROM racetrack_data;
- Получить список имен секторов и количество записей для каждого сектора.
SELECT sector, COUNT(*) AS record_count FROM racetrack_data GROUP BY sector;
- Получить максимальную скорость для каждого гонщика.
SELECT racer, MAX(speed) AS max_speed FROM racetrack_data GROUP BY racer;
- Получить список гонщиков и их средние баллы.
SELECT racer, AVG(total_score) AS avg_score FROM racetrack_data GROUP BY racer;
Эти примеры демонстрируют, как использовать функции DISTINCT, COUNT, MAX и AVG для анализа телеметрических данных и извлечения ценных инсайтов.
Анализировать данные с использованием коллекций именованной структуры
В этом шаге вы узнаете, как использовать функцию named_struct в Hive для создания сложных структур данных и более эффективного анализа телеметрических данных.
Во - первых, создадим новую таблицу Hive со вложенной структурой для хранения дополнительной информации о гонщиках:
CREATE TABLE racer_info (
id INT,
racer STRUCT<name:STRING, team:STRING, age:INT>,
performance STRUCT<speed:DOUBLE, altitude:DOUBLE, total_score:DOUBLE>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
STORED AS TEXTFILE;
Теперь вставим несколько примерных данных в таблицу racer_info:
INSERT INTO TABLE racer_info
VALUES
(1, named_struct('name', 'Benny', 'team', 'Cosmic Racers', 'age', 28), named_struct('speed', CAST(32.5 AS DOUBLE), 'altitude', CAST(12.7 AS DOUBLE), 'total_score', CAST(45.2 AS DOUBLE))),
(2, named_struct('name', 'Zara', 'team', 'Stellar Speeders', 'age', 32), named_struct('speed', CAST(28.9 AS DOUBLE), 'altitude', CAST(14.1 AS DOUBLE), 'total_score', CAST(43.0 AS DOUBLE))),
(3, named_struct('name', 'Alex', 'team', 'Galactic Gliders', 'age', 25), named_struct('speed', CAST(30.2 AS DOUBLE), 'altitude', CAST(11.5 AS DOUBLE), 'total_score', CAST(41.7 AS DOUBLE))),
(4, named_struct('name', 'Benny', 'team', 'Cosmic Racers', 'age', 28), named_struct('speed', CAST(35.7 AS DOUBLE), 'altitude', CAST(10.2 AS DOUBLE), 'total_score', CAST(45.9 AS DOUBLE))),
(5, named_struct('name', 'Zara', 'team', 'Stellar Speeders', 'age', 32), named_struct('speed', CAST(31.1 AS DOUBLE), 'altitude', CAST(12.8 AS DOUBLE), 'total_score', CAST(43.9 AS DOUBLE))),
(6, named_struct('name', 'Alex', 'team', 'Galactic Gliders', 'age', 25), named_struct('speed', CAST(29.8 AS DOUBLE), 'altitude', CAST(15.7 AS DOUBLE), 'total_score', CAST(45.5 AS DOUBLE)));
Теперь проанализируем данные с использованием функции named_struct:
- Получить имена гонщиков и их команды.
SELECT racer.name, racer.team FROM racer_info;
- Получить имена гонщиков и их максимальные скорости.
SELECT racer.name, performance.speed AS max_speed FROM racer_info;
- Получить имена гонщиков, их команды и их средние баллы.
SELECT racer.name, racer.team, AVG(performance.total_score) AS average_score
FROM racer_info
GROUP BY racer.name, racer.team;
Эти примеры демонстрируют, как использовать функцию named_struct для создания сложных структур данных и анализа данных.
Анализировать данные с использованием функций коллекционного набора
В этом шаге вы узнаете, как использовать функцию collect_set в Hive для выполнения операций с наборами над телеметрическими данными.
Во - первых, создадим новую таблицу Hive для хранения рейтингов гонщиков:
CREATE TABLE racer_rankings (
race_id INT,
sector STRING,
racer_names ARRAY<STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
STORED AS TEXTFILE;
Теперь вставим несколько примерных данных в таблицу racer_rankings:
INSERT INTO TABLE racer_rankings
VALUES
(1, 'Sector1', ARRAY('Benny', 'Alex')),
(2, 'Sector2', ARRAY('Zara', 'Alex')),
(3, 'Sector3', ARRAY('Benny', 'Zara', 'Alex')),
(4, 'Sector1', ARRAY('Benny', 'Zara')),
(5, 'Sector2', ARRAY('Zara', 'Alex')),
(6, 'Sector3', ARRAY('Benny', 'Alex'));
Теперь проанализируем данные с использованием функции collect_set:
- Получить список уникальных гонщиков по всем секторам.
SELECT DISTINCT racer_name
FROM racer_rankings
LATERAL VIEW EXPLODE(racer_names) rn AS racer_name;
- Получить список гонщиков, которые участвовали во всех секторах.
SELECT racer_name
FROM (
SELECT collect_set(racer_names) AS all_racers
FROM racer_rankings
) t
LATERAL VIEW EXPLODE(all_racers) rn AS racer_name;
- Получить список гонщиков, которые участвовали в по крайней мере двух секторах.
SELECT racer_name
FROM (
SELECT racer_name, COUNT(DISTINCT sector) AS num_sectors
FROM racer_rankings LATERAL VIEW explode(racer_names) exploded_table AS racer_name
GROUP BY racer_name
) t
WHERE num_sectors >= 2;
Эти примеры демонстрируют, как использовать функцию collect_set для выполнения операций с наборами, таких как DISTINCT, ПЕРЕСЕЧЕНИЕ и ОБЪЕДИНЕНИЕ, над телеметрическими данными.
Резюме
В этом лабе мы изучили различные функции работы с коллекциями в Hive, такие как DISTINCT, COUNT, MAX, AVG, named_struct, LATERAL VIEW, EXPLODE и collection_set. Работая с примерами наборов данных, представляющими телеметрические данные из космического турнира по гонкам, мы узнали, как анализировать и извлекать ценные инсайты из сложных структур данных.
С помощью практических упражнений мы приобрели практический опыт в создании вложенных структур данных, выполнении операций с наборами и агрегировании данных по конкретным критериям. Эти знания окажутся бесценными в нашей роли офицеров безопасности космических гонок, позволяя нам эффективно мониторить трассы, выявлять потенциальные опасности и обеспечивать справедливость и честность космических заездов.
В целом, этот лаб предоставил полное введение в функции работы с коллекциями Hive, оснастив нас необходимыми навыками для эффективного анализа и обработки больших наборов данных в экосистеме Hadoop.



