본문 바로가기
pyspark

pyspark countByValue

by kyeongseo.oh 2025. 2. 28.

텍스트 파일에서 학점 데이터를 읽고, 각 학점별 발생 빈도를 계산하여 내림차순으로 정렬해 출력하는 예제

 

전체 코드

import pyspark

sc = pyspark.SparkContext.getOrCreate()

sample = "sample/grade.txt"

data = sc.textFile(sample)

grade = data.map(lambda line : line.split(" ")[1])

#각 고유 값이 몇 번 출현하는지 계산하여 결과를 딕셔너리 형태로 반환
count = grade.countByValue()

# sorted(정렬할 데이터, key 파라미터, reverse 파라미터)
for grade, cnt in sorted(count.items(), key=lambda x : x[1], reverse=True):
    print(f"{grade}점 : {cnt}개")

 

데이터

A 70
B 80
C 100
D 90
E 90

 

1. 환경 설정 및 데이터 로드

import pyspark
sc = pyspark.SparkContext.getOrCreate()
sample = "sample/grade.txt"
data = sc.textFile(sample)

 

  • PySpark 라이브러리를 가져온다.
  • SparkContext.getOrCreate()를 사용하여 기존 SparkContext가 있으면 재사용하거나, 없으면 새로 생성한다.
  • "sample/grade.txt" 파일 경로를 지정한다.
  • textFile() 메서드로 텍스트 파일을 RDD(Resilient Distributed Dataset)로 로드한다.

2. 데이터 변환

grade = data.map(lambda line : line.split(" ")[1])

 

 

  • map() 변환 연산을 사용하여 각 줄에서 두 번째 단어(인덱스 1)를 추출한다.
  • 각 줄은 공백(" ")을 기준으로 분할된다.
  • 예: "A 90" → "90"이 추출된다.

3. 데이터 집계

count = grade.countByValue()

 

 

  • countByValue() 액션 연산은 RDD의 각 고유 값의 발생 횟수를 계산한다.
  • 결과는 Python 딕셔너리 형태 : {값: 발생횟수, ...}
  • 예: {'90': 3, '80': 2, '70': 1, ...}

4. 결과 정렬 및 출력

for grade, cnt in sorted(count.items(), key=lambda x : x[1], reverse=True):
    print(f"{grade}점 : {cnt}개")

 

 

  • count.items()는 딕셔너리의 키-값 쌍을 튜플 리스트로 반환한다.
  • sorted() 함수는 이 리스트를 정렬한다.:
    • key=lambda x : x[1]: 튜플의 두 번째 요소(발생 횟수)를 기준으로 정렬
    • reverse=True: 내림차순 정렬 (가장 높은 발생 횟수부터)
  • 정렬된 리스트를 순회하며 각 학점과 발생 횟수를 출력합니다.

 

'pyspark' 카테고리의 다른 글

pyspark aggregateByKey  (0) 2025.03.03
PySpark Key-Value 쌍 연산  (0) 2025.03.01
PySpark의 map과 flatMap 함수 비교  (0) 2025.02.28
pyspark word count 분석  (0) 2025.02.26

댓글