반응형
최근에 데이터 api를 수집한다고 json파일을 많이쓰고 있다
json은 파일이 굉장히 가벼워서 대용량 정보를 가져오긴 굉장히 좋지만 보기는 힘들다
그렇기 때문에 데이터 평탄화 작업을 한다고 하는데
이 중 대표적으로 평탄화 할 때 사용하는 건 바로 Spark다
Spark는 JSON의 중첩(nested) 구조를 다루고, 이를 평탄화된 형태로 변환하는 데 매우 유용한 도구이다
PySpark(Spark의 Python API)는 JSON 데이터를 처리하고 변환하는 데 자주 사용한다고 한다
왜 Spark를 사용하나?
- JSON 처리에 적합
- Spark는 JSON 데이터를 쉽게 읽고 구조를 이해할 수 있는 기능을 제공한다
- 중첩된 구조를 자동으로 파악하여 이를 DataFrame으로 변환
- 대규모 데이터 처리
- Spark는 분산 처리 프레임워크로 설계되어, JSON과 같은 대규모 데이터를 빠르게 처리할 수 있다
- 유연한 데이터 변환
- Spark는 중첩된 필드를 쉽게 선택하거나, 별도의 열(column)로 변환하는 작업을 간단히 수행할 수 있다
- 파일 변환과 연계
- JSON 데이터를 평탄화한 후 바로 Parquet, ORC, CSV 등으로 저장할 수 있다
JSON 평탄화를 Spark로 처리하는 방법
1. JSON 데이터 읽기
Spark는 JSON 데이터를 자동으로 분석하고, 중첩된 필드를 포함한 스키마를 생성
from pyspark.sql import SparkSession
# Spark 세션 생성
spark = SparkSession.builder.appName("JSONFlatten").getOrCreate()
# JSON 파일 읽기
json_df = spark.read.json("s3://your-bucket/path-to-json/")
json_df.printSchema()
2. JSON 데이터의 중첩 구조
#json파일의 예시
{
"id": 1,
"name": "Alice",
"address": {
"city": "New York",
"zip": "10001"
}
}
#spark는 아래와 같은 스키마 자동 생성
root
|-- id: integer (nullable = true)
|-- name: string (nullable = true)
|-- address: struct (nullable = true)
| |-- city: string (nullable = true)
| |-- zip: string (nullable = true)
3. 평탄화 작업
Spark의 select와 alias 기능을 사용해 중첩된 필드를 평탄화
from pyspark.sql.functions import col
# 중첩된 필드 평탄화
flattened_df = json_df.select(
col("id"),
col("name"),
col("address.city").alias("address_city"),
col("address.zip").alias("address_zip")
)
flattened_df.show()
#출력
+---+-----+------------+-----------+
| id| name|address_city|address_zip|
+---+-----+------------+-----------+
| 1|Alice| New York | 10001|
+---+-----+------------+-----------+
4. 평탄화된 데이터 저장
평탄화된 데이터를 Parquet 또는 다른 포맷으로 저장
flattened_df.write.parquet("s3://your-bucket/flattened-data/")
Spark 없이 JSON 평탄화를 하는 경우
Spark 없이 JSON 데이터를 평탄화 가능하다
Python의 pandas, json_normalize, 또는 수작업으로 처리해야한다
- 대규모 데이터셋 처리 가능
- 효율적인 분산 처리
- S3, HDFS 등 다양한 데이터 소스와의 연계
반응형
'데이터 처리 및 변환 (transform)' 카테고리의 다른 글
AWS Clawer (글루 크롤러) 사용 해보기 (1) | 2025.01.13 |
---|---|
AWS Glue Job(글루 잡) 사용해보기 (1) | 2025.01.12 |
AWS glue의 개념 및 활용 glue job과 glue crawler (1) | 2025.01.10 |