Optimización de datos de carreras cósmicas

HadoopHadoopBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En el futuro, se celebra un torneo de carreras interestelares de alta apuesta en una serie de circuitos de carreras peligrosos por todo el cosmos. Como Oficial de Seguridad de Carreras Espaciales, tu principal responsabilidad es garantizar la seguridad y equidad de estas carreras cósmicas mediante la vigilancia estrecha de los circuitos de carreras y las naves espaciales participantes.

La misión consiste en analizar los datos de telemetría recopilados en varias secciones de los circuitos de carreras para identificar peligros potenciales, infracciones al reglamento y optimizar la experiencia de carrera para competidores y espectadores por igual. Al aprovechar las poderosas capacidades de procesamiento de datos de Hadoop, puedes descubrir información valiosa que ayudará a mantener la integridad y el entusiasmo de las carreras cósmicas.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/basic_hiveql("Basic HiveQL Queries") hadoop/HadoopHiveGroup -.-> hadoop/group_by("group by Usage") hadoop/HadoopHiveGroup -.-> hadoop/collection("Collection Operating Function") hadoop/HadoopHiveGroup -.-> hadoop/table_generating("Table Generating Function") hadoop/HadoopHiveGroup -.-> hadoop/udf("User Defined Function") hadoop/HadoopHiveGroup -.-> hadoop/schema_design("Schema Design") subgraph Lab Skills hadoop/create_tables -.-> lab-288959{{"Optimización de datos de carreras cósmicas"}} hadoop/basic_hiveql -.-> lab-288959{{"Optimización de datos de carreras cósmicas"}} hadoop/group_by -.-> lab-288959{{"Optimización de datos de carreras cósmicas"}} hadoop/collection -.-> lab-288959{{"Optimización de datos de carreras cósmicas"}} hadoop/table_generating -.-> lab-288959{{"Optimización de datos de carreras cósmicas"}} hadoop/udf -.-> lab-288959{{"Optimización de datos de carreras cósmicas"}} hadoop/schema_design -.-> lab-288959{{"Optimización de datos de carreras cósmicas"}} end

Explorar las funciones de operación de colecciones en Hive

En este paso, aprenderás a usar las funciones de operación de colecciones en Hive para procesar y analizar los datos de telemetría recopilados de los circuitos de carreras.

Primero, asegúrate de estar registrado como el usuario hadoop ejecutando el siguiente comando en la terminal:

su - hadoop

Luego, creemos un conjunto de datos de muestra con el que trabajar. Abre un editor de texto y crea un nuevo archivo llamado racetrack_data.txt con el siguiente contenido:

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

Este conjunto de datos representa datos de telemetría de diferentes sectores del circuito de carreras, con columnas que representan el ID de registro, el nombre del sector, el nombre del corredor, la velocidad, la altitud y la puntuación total.

Ahora, iniciemos la CLI de Hive:

hive

A continuación, crea una nueva tabla de Hive para almacenar estos datos:

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;

Carga los datos del archivo racetrack_data.txt en la tabla de Hive:

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

Ahora, exploremos algunas funciones de operación de colecciones en Hive:

  1. Obtener una lista de los nombres de corredores únicos.
SELECT DISTINCT racer FROM racetrack_data;
  1. Obtener una lista de los nombres de sectores y la cuenta de registros para cada sector.
SELECT sector, COUNT(*) AS record_count FROM racetrack_data GROUP BY sector;
  1. Obtener la velocidad máxima de cada corredor.
SELECT racer, MAX(speed) AS max_speed FROM racetrack_data GROUP BY racer;
  1. Obtener la lista de corredores y sus puntuaciones promedio.
SELECT racer, AVG(total_score) AS avg_score FROM racetrack_data GROUP BY racer;

Estos ejemplos demuestran cómo usar funciones como DISTINCT, COUNT, MAX y AVG para analizar los datos de telemetría y extraer información valiosa.

Analizar datos utilizando colecciones de struct con nombre

En este paso, aprenderás a usar la función named_struct en Hive para crear estructuras de datos complejas y analizar más eficazmente los datos de telemetría.

Primero, creemos una nueva tabla de Hive con una estructura anidada para almacenar información adicional de los corredores:

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;

Ahora, insertemos algunos datos de muestra en la tabla 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)));

Ahora, analicemos los datos utilizando la función named_struct:

  1. Obtener los nombres de los corredores y sus equipos.
SELECT racer.name, racer.team FROM racer_info;
  1. Obtener los nombres de los corredores y sus velocidades máximas.
SELECT racer.name, performance.speed AS max_speed FROM racer_info;
  1. Obtener los nombres de los corredores, sus equipos y sus puntuaciones promedio.
SELECT racer.name, racer.team, AVG(performance.total_score) AS average_score
FROM racer_info
GROUP BY racer.name, racer.team;

Estos ejemplos demuestran cómo usar la función named_struct para crear estructuras de datos complejas y analizar los datos.

Analizar datos utilizando funciones de conjuntos de colección

En este paso, aprenderás a usar la función collect_set en Hive para realizar operaciones de conjunto en los datos de telemetría.

Primero, creemos una nueva tabla de Hive para almacenar los rankings de los corredores:

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;

Ahora, insertemos algunos datos de muestra en la tabla 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'));

Ahora, analicemos los datos utilizando la función collect_set:

  1. Obtener la lista de corredores únicos en todos los sectores.
SELECT DISTINCT racer_name
FROM racer_rankings
LATERAL VIEW EXPLODE(racer_names) rn AS racer_name;
  1. Obtener la lista de corredores que participaron en todos los sectores.
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;
  1. Obtener la lista de corredores que participaron en al menos dos sectores.
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;

Estos ejemplos demuestran cómo usar la función collect_set para realizar operaciones de conjunto como DISTINCT, INTERSECCIÓN y UNIÓN en los datos de telemetría.

Resumen

En este laboratorio, exploramos varias funciones de operación de colecciones en Hive, como DISTINCT, COUNT, MAX, AVG, named_struct, LATERAL VIEW, EXPLODE y collection_set. Al trabajar con conjuntos de datos de muestra que representan datos de telemetría de un torneo de carreras interestelares, aprendimos cómo analizar y extraer información valiosa de estructuras de datos complejas.

A través de ejercicios prácticos, adquirimos experiencia práctica en la creación de estructuras de datos anidadas, la realización de operaciones de conjunto y la agregación de datos según criterios específicos. Este conocimiento resultará invaluable en nuestro papel de Oficiales de Seguridad de Carreras Espaciales, lo que nos permitirá monitorear eficazmente los circuitos de carreras, identificar peligros potenciales y garantizar la equidad y la integridad de las carreras cósmicas.

En general, este laboratorio proporcionó una introducción integral a las funciones de operación de colecciones de Hive, dotándonos de las habilidades necesarias para analizar y procesar eficientemente grandes conjuntos de datos en el ecosistema Hadoop.