Sobes.tech
Middle+

თქვენი გამოცდილება AWS Glue, Antenna და Spark-თან მუშაობაში რა არის?

sobes.tech AI

პასუხი AI-სგან

AWS Glue-თან მუშაობა სერვერზე არამიწოდებული ETL-შესრულებებისთვის, PySpark-ის გამოყენებით. Glue-ის ტრიგერების კონფიგურაცია S3-ის მოვლენებზე. AWS Data Catalog-ის გამოყენება.

Antennaga არ მქონია გამოცდილება.

Apache Spark-თან მუშაობა ძირითადად PySpark-ის საშუალებით, დიდი მონაცემების დამუშავებისთვის. Spark SQL-ის გამოყენება სტრუქტურირებული კითხვებისთვის და RDD API-ის გამოყენება დაბალ დონეზე ოპერაციებისათვის. Spark-ის განთავსების გამოცდილება: ადგილობრივი კლასტერები, YARN და Spark on Kubernetes.

პროგრამის მაგალითი მარტივი ETL სკრიპტისთვის PySpark-ის გამოყენებით 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)

# მონაცემების წაკითხვა 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"
)

# მონაცემების გარდაქმნა (მაგალითი: სვეტების არჩევა და სახელების შეცვლა)
applymapping1 = ApplyMapping.apply(
    frame=datasource0,
    mappings=[
        ("id", "long", "user_id", "long"),
        ("name", "string", "user_name", "string"),
        ("value", "double", "amount", "double")
    ],
    transformation_ctx="applymapping1"
)

# გარდაქმნილი მონაცემების 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()