Sobes.tech
Middle+

Qual è la tua esperienza con AWS Glue, Antenna e Spark?

sobes.tech AI

Risposta dell'AI

Ho lavorato con AWS Glue per compiti ETL serverless, utilizzando PySpark. Ho configurato trigger Glue su eventi S3. Ho usato AWS Data Catalog.

Non ho esperienza con Antenna.

Ho lavorato principalmente con Apache Spark tramite PySpark per elaborare grandi dati. Ho utilizzato Spark SQL per query strutturate e API RDD per operazioni di livello inferiore. Esperienza nel deployment di Spark: cluster locali, YARN e Spark su Kubernetes.

Esempio di uno script ETL semplice in PySpark per AWS Glue:

# glue_etl_script.py
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# Lettura dati da S3
datasource0 = glueContext.create_dynamic_frame.from_options(
    format_options={"multiline": False},
    connection_type="s3",
    format="json",
    connection_options={"paths": ["s3://my-source-bucket/input_data/"], "recurse": True},
    transformation_ctx="datasource0"
)

# Trasformazione dati (esempio: selezione e rinomina colonne)
applymapping1 = ApplyMapping.apply(
    frame=datasource0,
    mappings=[
        ("id", "long", "user_id", "long"),
        ("name", "string", "user_name", "string"),
        ("value", "double", "amount", "double")
    ],
    transformation_ctx="applymapping1"
)

# Scrittura dati trasformati di nuovo in S3
datasink2 = glueContext.write_dynamic_frame.from_options(
    frame=applymapping1,
    connection_type="s3",
    format="parquet",
    connection_options={"path": "s3://my-target-bucket/output_data/", "partitionKeys": []},
    transformation_ctx="datasink2"
)

job.commit()