RDD를 사용하여 단어 빈도수를 계산
2025. 1. 19. 18:16ㆍDATA/Spark
반응형
from pyspark.sql import SparkSession
from pyspark import SparkContext
from pyspark.rdd import RDD
# SparkSession 생성
# SparkSession은 DataFrame API 및 SQL의 진입점
# SparkContext는 RDD API의 진입점
ss: SparkSession = SparkSession.builder.\
master("local").\ # 로컬 모드에서 Spark 실행 (싱글 코어 또는 멀티 코어)
appName("wordCount RDD ver").\ # 애플리케이션 이름 설정
getOrCreate() # SparkSession이 없으면 새로 생성, 있으면 기존 SparkSession을 반환
# SparkContext를 사용하여 RDD 작업을 수행하기 위한 진입점
sc: SparkContext = ss.sparkContext
# RDD 생성: textFile()을 사용하여 "words.txt" 파일을 읽어 RDD로 변환
# 각 줄을 하나의 항목으로 간주하여 RDD에 저장
text_file: RDD[str] = sc.textFile("words.txt")
# 단어 빈도수를 계산하는 작업
counts = text_file.\
flatMap(lambda line: line.split(" ")).\ # 각 줄을 공백으로 분리하여 단어를 플랫하게 펼침
map(lambda word: (word, 1)).\ # 각 단어에 대해 (단어, 1) 형태로 매핑
reduceByKey(lambda count1, count2: count1 + count2) # 동일한 단어끼리 값을 합침 (단어 빈도수 계산)
# 결과를 수집하여 출력
output = counts.collect() # 클러스터에서 실행한 결과를 로컬로 수집 (리스트로 반환)
# 결과 출력 (출력된 결과는 각 단어와 그 빈도수의 튜플)
for word, count in output:
print(f"{word}: {count}")
- SparkSession 생성 (SparkSession.builder):
- SparkSession은 Spark SQL과 DataFrame API를 사용하기 위한 진입점
- master("local")은 Spark 클러스터를 로컬 모드로 실행하겠다는 의미
- appName("wordCount RDD ver")은 Spark 애플리케이션의 이름을 설정합니다.
- getOrCreate()는 현재 세션이 없으면 새로운 SparkSession을 생성하고, 있으면 기존의 세션을 반환
- SparkContext (ss.sparkContext):
- SparkSession은 SparkContext를 내부적으로 관리 SparkContext는 RDD API와 작업을 수행하기 위한 진입점
- sc: SparkContext = ss.sparkContext로 SparkContext 객체를 얻음
- RDD 생성 (sc.textFile):
- sc.textFile("words.txt")는 "words.txt" 파일을 읽어 RDD로 변환한다. 각 줄은 RDD의 하나의 항목이 된다. 이 경우, 각 줄을 text_file이라는 RDD에 저장한다.
- 단어 빈도수 계산:
- flatMap(lambda line: line.split(" ")):
- 각 줄을 공백을 기준으로 단어별로 나누어 플랫하게 펼친다. 즉, 하나의 줄을 여러 개의 단어로 분리하여 RDD로 변환
- 예를 들어, "hello world"라는 줄이 있으면, 이 줄은 ["hello", "world"]라는 형태로 변환된다.
- map(lambda word: (word, 1)):
- 각 단어에 대해 (단어, 1) 형태로 변환 즉, 모든 단어를 (단어, 1) 튜플로 변환하여 각 단어에 대해 1을 카운팅
- reduceByKey(lambda count1, count2: count1 + count2):
- reduceByKey는 동일한 키(단어)에 대해 값을 합치는 작업을 수행. 즉, 동일한 단어가 여러 번 등장하면 그 횟수를 합산한다.
- flatMap(lambda line: line.split(" ")):
만약 words.txt 파일에 다음과 같은 내용이 있다면:
hello world hello
spark is awesome
hello spark
출력은
hello: 3
world: 1
spark: 2
is: 1
awesome: 1
- flatMap은 각 항목을 여러 개로 분리하는 데 사용되고 map은 각 항목을 하나로 변환한다.
- reduceByKey는 동일한 키에 대해 값을 합치거나 집계하는 데 사용된다.
반응형
'DATA > Spark' 카테고리의 다른 글
Incremental(증분) 방식과 문제점 | Lambda | Kappa Architecture (0) | 2025.01.18 |
---|---|
PySpark를 사용하여 특정 설정으로 Spark 세션을 초기화 (0) | 2024.08.10 |
Spark의 연산 (0) | 2024.08.10 |
RDD(Resilient Distributed Dataset)의 장애 복원 절차 (0) | 2024.08.10 |