1. 개요
데이터 분석과 머신러닝에서 다양한 데이터 소스를 결합하고 유의미한 특성을 발굴하는 과정은 매우 중요하다. 특히 대규모 데이터를 다룰 때 SQL을 통한 데이터 결합과 특성 엔지니어링(Feature Engineering)은 성능 최적화와 예측력 향상에 필수적인 작업이다. Spark는 SQL 구문과 고급 데이터 처리 도구를 제공해 방대한 데이터를 효율적으로 결합하고 가공할 수 있는 환경을 제공한다. 이번 글에서는 Spark SQL을 활용해 데이터 결합과 특성 엔지니어링 기법을 구현하는 방법을 다루어 실무에서 유용하게 적용할 수 있는 인사이트를 제공하고자 한다.
2. Spark SQL을 활용한 데이터 결합
Temporary View와 SQL 쿼리
Spark에서는 DataFrame을 SQL 쿼리처럼 사용할 수 있도록 Temporary View를 지원한다. 이를 통해 SQL에 익숙한 사용자도 손쉽게 데이터를 조회하고 필터링할 수 있다. Temporary View에 SQL 쿼리를 적용하는 방식으로 간단하게 데이터를 결합하는 예시를 살펴보자.
# DataFrame을 Temporary View로 등록
spark_df.createOrReplaceTempView("people")
# SQL 쿼리로 데이터 조회
result_df = spark.sql("SELECT * FROM people WHERE age > 25")
result_df.show()
SQL 조인의 활용과 데이터 결합
SQL 조인은 여러 DataFrame을 결합해 서로 다른 테이블의 정보를 통합할 수 있는 강력한 도구다. Spark SQL은 Inner, Left, Right, Full Outer 등 다양한 조인 방식을 제공하여 복합적인 데이터 간 관계를 쉽게 연결할 수 있다.
Inner 조인 예시
두 DataFrame의 공통된 키를 기준으로 매칭되는 데이터만 결합하는 방식이다.
result = spark.sql("""
SELECT c.name, o.order_id, o.amount
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id
""")
result.show()
이 외에도 Left 조인, Right 조인, Full Outer 조인을 사용해 원하는 데이터 결합 방식을 적용할 수 있다.
3. 특성 엔지니어링(Feature Engineering)의 개요
특성 엔지니어링은 데이터를 분석해 모델 성능을 최적화하는 중요한 단계다. 데이터를 이해하고 그 특성을 반영해 유의미한 파생 변수를 생성하면 예측 모델의 정확도와 효율성을 크게 향상할 수 있다. Spark는 다양한 메서드와 SQL 구문을 통해 간편하게 새로운 피처를 생성할 수 있다.
4. Spark를 활용한 기본 특성 엔지니어링 기법
Spark의 withColumn 메서드를 사용하면 DataFrame에 파생 변수를 추가하거나 기존 변수를 변형할 수 있다. 예를 들어, 나이(age) 컬럼에 10을 더한 새로운 컬럼을 추가하는 예시를 살펴보자.
# age 컬럼에 10을 더한 파생 변수 추가
updated_df = spark_df.withColumn("age_plus_10", spark_df.age + 10)
updated_df.show()
도메인 특성을 반영한 피처 생성
도메인의 특성을 반영한 피처는 모델 성능에 중요한 영향을 미친다. 예를 들어, 전자상거래 데이터를 다룰 때는 고객의 총 구매 금액이나 평균 구매 금액을 계산하여 피처로 사용할 수 있다.
# 고객별 총 구매 금액과 평균 구매 금액 계산
aggregated_data = data.groupBy("customer_id").agg(
F.sum("amount").alias("total_purchase_amount"),
F.avg("amount").alias("avg_purchase_amount")
)
aggregated_data.show()
5. 복합적인 피처 엔지니어링과 파이프라인 적용
복합 피처 생성
Spark는 여러 조건을 조합해 새로운 피처를 생성할 수 있다. 예를 들어, 구매 빈도와 총 구매 금액을 조합해 고객 등급을 구분하는 피처를 생성할 수 있다.
data = data.withColumn(
"customer_tier",
when((data.total_purchase_amount >= 1000) & (data.purchase_frequency >= 10), "VIP")
.when((data.total_purchase_amount >= 500), "Regular")
.otherwise("Basic")
)
data.show()
전처리와 특성 엔지니어링의 파이프라인 자동화
Spark의 파이프라인 기능을 활용하면 전처리와 특성 엔지니어링 작업을 자동화할 수 있다. 이렇게 구성한 파이프라인은 일관성 있는 처리가 가능해 새로운 데이터에도 손쉽게 적용할 수 있다.
from pyspark.ml import Pipeline
from pyspark.ml.feature import StringIndexer, StandardScaler
indexer = StringIndexer(inputCol="category", outputCol="categoryIndex")
scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures")
pipeline = Pipeline(stages=[indexer, scaler])
# 파이프라인을 학습 데이터에 적용
pipeline_model = pipeline.fit(train_data)
processed_data = pipeline_model.transform(test_data)
6. 결론
이번 글에서는 SQL을 통한 데이터 결합과 Spark를 활용한 특성 엔지니어링 기법을 소개했다. SQL 구문을 사용해 여러 DataFrame을 결합하고, 복합적인 피처를 통해 예측력을 높이는 다양한 방법을 다뤘다. Spark의 파이프라인 기능을 통해 대규모 데이터 전처리를 자동화할 수 있으며, 일관성 있는 분석 환경을 구축할 수 있다.
Spark는 데이터 결합과 특성 엔지니어링 작업에 매우 유용한 도구로, 다양한 프로젝트에 유연하게 적용 가능하다. Spark로 더욱 효율적인 데이터 분석과 머신러닝을 구현해 보자.
'기술 노트 > Apache Spark' 카테고리의 다른 글
Apache Spark 머신러닝 분류 및 회귀 모델 - 다양한 모델 학습과 활용 (0) | 2024.11.18 |
---|---|
Apache Spark ML 파이프라인과 하이퍼 파라미터 튜닝 - 모델 학습 최적화 (0) | 2024.11.17 |
Apache Spark 데이터 변형 및 집계 기능 - 대규모 데이터 효율화 (0) | 2024.11.16 |
Apache Spark 실무 활용 가이드: 데이터 처리와 최적화 (0) | 2024.03.31 |