es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Abrir y leer archivos en AWS Glue con Python

Tengo un código Python simple a continuación. Esto está escrito en el escritorio, ahora quiero recrear esto en AWS Glue o Lambda, tengo que leer el archivo de prueba testfile.csv desde un directorio de S3 y guardarlo en un archivo txt como se muestra a continuación. ¿Cómo puedo recrear esta apertura y lectura en el entorno de AWS Glue/Lambda? Cualquier sugerencia es apreciada.

filepath = testfile.csv
txt = open(filepath).read()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para recrear el código anterior en el entorno de AWS Glue o Lambda, necesitarías modificarlo para acceder al archivo almacenado en Amazon S3. A continuación se muestra el código que muestra cómo se puede leer el archivo testfile.csv en AWS Lambda:

    import boto3
    
    s3 = boto3.resource('s3')
    
    def lambda_handler(event, context):
        bucket_name = 'nombre-de-tu-bucket'
        file_name = 'testfile.csv'
    
        obj = s3.Object(bucket_name, file_name)
        txt = obj.get()['Body'].read().decode('utf-8')
    
        # Hacer algo con el archivo de texto
    

    En el código anterior, debes reemplazar la variable “bucket_name” con el nombre de tu bucket de Amazon S3, y la variable “file_name” con el nombre de tu archivo.

    Para AWS Glue, puedes utilizar el objeto glueContext para leer el archivo CSV y extraer los datos. Aquí tienes un ejemplo de código:

    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from awsglue.context import GlueContext
    
    glueContext = GlueContext(SparkContext.getOrCreate())
    
    # Especifica la ruta del archivo S3 y el nombre del bucket de S3
    s3_path = 's3://nombre-de-tu-bucket/ruta/al/testfile.csv'
    
    # Crea un DataFrame utilizando AWS Glue
    df = glueContext.read.format("com.databricks.spark.csv").option("header", "true").load(s3_path)
    
    # Convierte el DataFrame a RDD y extrae los datos como cadena de texto
    rdd = df.rdd.map(lambda row: ','.join([str(c) for c in row]))
    txt = '\n'.join(rdd.collect())
    
    # Hacer algo con el archivo de texto
    

    En el código anterior, debes reemplazar “nombre-de-tu-bucket” con el nombre real de tu bucket de S3, y “ruta/al/testfile.csv” con la ruta real del archivo en S3. También puedes modificar el comando option("header", "true") para que coincida con el formato de tu archivo CSV.

Comments are closed.