paint-brush
Antes de que la IA prediga quién será tu próximo amigo, primero debe hacer estopor@andrei9735
458 lecturas
458 lecturas

Antes de que la IA prediga quién será tu próximo amigo, primero debe hacer esto

por Andrei7m2025/02/11
Read on Terminal Reader

Demasiado Largo; Para Leer

En esta publicación continuaremos trabajando en la predicción de enlaces con el conjunto de datos de Twitch.
featured image - Antes de que la IA prediga quién será tu próximo amigo, primero debe hacer esto
Andrei HackerNoon profile picture

En esta publicación, continuaremos trabajando en la predicción de enlaces con el conjunto de datos de Twitch: exportaremos los datos del gráfico del clúster de Neptune DB a un depósito de S3 mediante la utilidad neptune-export proporcionada por AWS. Elegiremos el perfil "neptune_ml" cuando creemos la tarea de exportación de datos y la utilidad creará el archivo "training-data-configuration.json" que usaremos más adelante en el proceso. Los datos exportados estarán listos para la codificación de características y el procesamiento de datos, que es el siguiente paso necesario para la predicción de enlaces.


Lea la parte 1 aquí .

DATOS DEL GRÁFICO EN LA BASE DE DATOS NEPTUNE

Comenzamos con los datos gráficos que tenemos en Neptune DB después de cargar las listas de vértices y aristas usando la API Neptune Bulk Loader (como se describe en la Parte 1 de esta guía).


Los vértices representan a los usuarios. Todos los vértices contienen el mismo conjunto de propiedades y un único vértice tiene el siguiente aspecto:

 {<T.id: 1>: '153', <T.label: 4>: 'user', 'days': 1629, 'mature': True, 'views': 3615, 'partner': False}


Todos los bordes tienen la misma etiqueta ('follows'), cada borde conecta a 2 usuarios. Un solo borde se ve así:

 {<T.id: 1>: '0', <T.label: 4>: 'follows', <Direction.IN: 'IN'>: {<T.id: 1>: '255', <T.label: 4>: 'user'}, <Direction.OUT: 'OUT'>: {<T.id: 1>: '6194', <T.label: 4>: 'user'}}


Nuestro objetivo es exportar los datos para que puedan usarse en la siguiente parte de nuestro proceso de procesamiento de datos: preprocesamiento y codificación de características.

EJECUCIÓN DE LA UTILIDAD NEPTUNE-EXPORT EN EC2

Usaremos la utilidad neptune-export proporcionada por AWS para exportar datos de la base de datos. Para permitir que la utilidad acceda a la base de datos, la ejecutaremos en una instancia EC2 dentro de la VPC donde se encuentra el clúster de Neptune DB. La utilidad obtendrá los datos de la base de datos, los guardará en el almacenamiento local (un volumen EBS) y luego cargará los datos exportados a S3.


Aunque AWS proporciona una plantilla de Cloudformation que implementa una API privada dentro de su VPC para permitir que el proceso de exportación se inicie con una solicitud HTTP, no nos centraremos en eso esta vez. Como nuestro objetivo es demostrar cómo funciona la canalización de datos (y no configurar una API), simplemente usaremos la consola de la instancia EC2 para interactuar con la utilidad neptune-export. Por cierto, esos comandos de consola se pueden automatizar con las funciones de pasos y comandos de ejecución de AWS Systems Manager.


Vamos a crear la instancia EC2 en la que ejecutaremos neptune-export. Para AMI, elegimos Ubuntu 24.04 LTS. Necesitamos asegurarnos de que el clúster Neptune sea accesible desde la instancia EC2, por lo que crearemos la instancia en la misma VPC donde se encuentra el clúster Neptune y configuraremos los grupos de seguridad para permitir el tráfico de red entre la instancia y el clúster. También necesitamos adjuntar un volumen EBS de tamaño suficiente para contener los datos exportados. Para el conjunto de datos en el que estamos trabajando, un volumen de 8 GB es suficiente.


Mientras se inicia la instancia, necesitamos crear un rol de IAM que permita el acceso de escritura al depósito S3 de destino, y también algunas acciones de RDS, como se muestra en la política a continuación. Si bien la primera declaración de la política es obligatoria, la segunda solo es necesaria si exporta datos desde un clúster clonado. La exportación de datos desde clústeres clonados se analizará más adelante en esta publicación.

 { "Version": "2012-10-17", "Statement": [ { "Sid": "RequiredPart", "Effect": "Allow", "Action": [ "rds:ListTagsForResource", "rds:DescribeDBInstances", "rds:DescribeDBClusters" ], "Resource": "*" }, { "Sid": "OptionalPartOnlyRequiredForExportingFromClonedCluster", "Effect": "Allow", "Action": [ "rds:AddTagsToResource", "rds:DescribeDBClusters", "rds:DescribeDBInstances", "rds:ListTagsForResource", "rds:DescribeDBClusterParameters", "rds:DescribeDBParameters", "rds:ModifyDBParameterGroup", "rds:ModifyDBClusterParameterGroup", "rds:RestoreDBClusterToPointInTime", "rds:DeleteDBInstance", "rds:DeleteDBClusterParameterGroup", "rds:DeleteDBParameterGroup", "rds:DeleteDBCluster", "rds:CreateDBInstance", "rds:CreateDBClusterParameterGroup", "rds:CreateDBParameterGroup" ], "Resource": "*" } ] }

Puede permitir el acceso solo al clúster de destino (en lugar de a todos los clústeres) editando el campo "Recurso".


El rol también debe tener una política de confianza que permita a EC2 asumir el rol:

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Una vez que la instancia EC2 y el rol estén listos, adjuntaremos el rol a la instancia.


A continuación, debemos instalar la utilidad neptune-export en la instancia. Para ello, iniciaremos sesión en la instancia y utilizaremos estos comandos para instalar JDK 8 y descargar la utilidad:

 sudo apt update -y sudo apt install -y openjdk-8-jdk curl -O https://s3.amazonaws.com/aws-neptune-customer-samples/neptune-export/bin/neptune-export.jar

Ahora que hemos preparado la instancia EC2, el depósito S3 de destino y hemos adjuntado el rol de IAM que permite el acceso de escritura al depósito S3 de destino a la instancia, podemos comenzar a exportar datos. Usaremos este comando para iniciar el proceso, proporcionando los parámetros necesarios como un objeto JSON:

 java -jar /home/ubuntu/neptune-export.jar nesvc \ --root-path /home/ubuntu/neptune-export \ --json '{ "command": "export-pg", "outputS3Path" : "s3://YOUR_TARGET_S3_BUCKET/neptune-export", "params": { "endpoint" : "YOUR_CLUSTER_ENDPOINT", "profile": "neptune_ml" } }'

Aquí solo usamos los parámetros requeridos, pero puedes extender la configuración fácilmente. Puedes elegir qué parte del gráfico exportar usando el parámetro 'filtro': puedes seleccionar nodos, bordes y sus propiedades.


Si está exportando datos desde una base de datos activa, puede usar los parámetros " cloneCluster " y " cloneClusterReplicaCount " para que la utilidad neptue-export tome una instantánea de la base de datos, cree un nuevo clúster de Neptune a partir de esa instantánea, implemente réplicas de lectura y las use para exportar los datos. Al hacer eso, puede asegurarse de que la base de datos activa no se vea afectada por la carga adicional de la exportación de datos.

La lista completa de parámetros se puede encontrar aquí ( https://docs.aws.amazon.com/neptune/latest/userguide/export-parameters.html ).

VISUALIZACIÓN DE DATOS EXPORTADOS Y PRÓXIMOS PASOS

Cuando se completa el proceso de exportación, neptune-export imprime algunas estadísticas, incluidos los números de vértices y aristas:

 Source: Nodes: 7126 Edges: 70648 Export: Nodes: 7126 Edges: 70648 Properties: 28504 Details: Nodes: user: 7126 |_ days {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Integer:7126]} |_ mature {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Boolean:7126]} |_ views {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Integer:7126]} |_ partner {propertyCount=7126, minCardinality=1, maxCardinality=1, recordCount=7126, dataTypeCounts=[Boolean:7126]} Edges: (user)-follows-(user): 70648

Y luego carga los datos exportados a S3.


Veamos los archivos que se crean en el depósito S3 de destino:

















Los directorios "nodos" y "bordes" contienen archivos CSV con las listas de nodos y bordes que son similares a los que usamos en la Parte 1 cuando cargamos los datos. Para gráficos grandes, hay varios archivos, pero nuestro conjunto de datos es pequeño y solo hay un archivo en cada directorio. También está el archivo training-data-configuration.json que editaremos y usaremos en el siguiente paso de nuestro proceso.


Si está realizando una exportación única, ahora es seguro eliminar la instancia EC2 y el volumen EBS, ya que solo se utilizarán los archivos en el depósito S3 de destino en el siguiente paso. De lo contrario, puede simplemente detener la instancia EC2 para evitar que se le cobre por el tiempo de inactividad (se le seguirá cobrando por el almacenamiento EBS a menos que lo elimine).


En este punto, tenemos los datos del gráfico en S3 en el formato que se puede usar en el siguiente paso del proceso, y estamos listos para realizar la codificación de características y el procesamiento de datos, lo que se analizará en nuestra próxima publicación.