Scala for Backend Engineering & Functional Programming · 강의

집계

그룹화하고 집계합니다

레슨 4/413개 단계

집계은(는) CoddyKit의 무료 Scala for Backend Engineering & Functional Programming 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Scala for Backend Engineering & Functional Programming 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

왜 집계할까요?

집계는 많은 행을 합계, 평균, 그룹별 개수처럼 더 적은 수의 요약 결과로 정리합니다. Spark에서 집계는 클러스터 전체로 데이터를 셔플할 수 있는 넓은 연산입니다.

전체 집계

agg와 count, sum, avg, min, max와 같은 함수를 사용해 전체 DataFrame에 대한 하나의 요약 결과를 계산합니다.

import org.apache.spark.sql.functions._

df.agg(
  count("*").as("rows"),
  avg("age").as("avg_age")
).show()

groupBy

groupBy는 하나 이상의 열을 기준으로 행을 분할하여 집계할 준비가 된 RelationalGroupedDataset을 생성합니다.

import org.apache.spark.sql.functions._

val byCity = df.groupBy("city").agg(count("*").as("people"))
byCity.show()

여러 집계

여러 집계 표현식을 agg에 전달하면 한 번의 처리로 그룹별 요약 결과를 여러 개 계산할 수 있습니다.

import org.apache.spark.sql.functions._

df.groupBy("department").agg(
  sum("salary").as("total"),
  avg("salary").as("avg"),
  max("salary").as("top")
).show()

고유 값 개수 세기

countDistinct를 사용하면 고유 값의 개수를 셀 수 있고, 매우 큰 데이터셋에서 더 빠른 근사 개수를 구하려면 approx_count_distinct를 사용합니다.

import org.apache.spark.sql.functions._

df.agg(countDistinct("city").as("unique_cities")).show()

having으로 그룹 필터링

SQL에서는 HAVING으로 집계된 그룹을 필터링합니다. DSL에서는 agg 뒤에 계산된 열에 filter를 적용합니다.

import org.apache.spark.sql.functions._

df.groupBy("city")
  .agg(count("*").as("n"))
  .filter(col("n") > 100)
  .show()

SQL에서 집계하기

등록된 뷰를 대상으로 GROUP BY와 HAVING을 사용하는 SQL 쿼리와 동일한 로직입니다.

df.createOrReplaceTempView("people")
spark.sql(
  "SELECT city, COUNT(*) AS n FROM people GROUP BY city HAVING COUNT(*) > 100"
).show()

피벗 테이블

pivot은 열의 고유 값을 별도의 열로 변환합니다. 지역별 분기별 매출과 같은 교차표를 만들 때 유용합니다.

import org.apache.spark.sql.functions._

sales.groupBy("region")
     .pivot("quarter")
     .agg(sum("amount"))
     .show()

윈도 함수

윈도 함수는 행을 하나의 그룹별 행으로 축약하지 않고 이동하는 프레임을 대상으로 집계합니다. 누적 합계나 순위를 계산할 때 적합합니다.

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

val w = Window.partitionBy("dept").orderBy(col("salary").desc)
df.withColumn("rank", rank().over(w)).show()

RDD 집계

RDD 수준에서 aggregateByKey와 reduceByKey는 사용자 지정 로직과 효율적인 로컬 사전 결합을 사용해 키별 값을 결합합니다.

val pairs = sc.parallelize(Seq(("a", 10), ("a", 20), ("b", 5)))
val sums  = pairs.reduceByKey(_ + _)
// (a, 30), (b, 5)

순수 Scala의 groupBy

독립적으로 실행할 수 있는 예시입니다. Scala 컬렉션의 groupBy와 mapValues를 함께 사용하면 Spark의 그룹화 및 집계를 그대로 보여 줍니다.

object Main {
  def main(args: Array[String]): Unit = {
    val data = Seq(("a", 10), ("a", 20), ("b", 5))
    val sums = data.groupBy(_._1).map { case (k, v) => k -> v.map(_._2).sum }
    sums.toSeq.sortBy(_._1).foreach { case (k, s) => println(s"$k: $s") }
  }
}

빠른 확인

행을 그룹별 한 행으로 축약하지 않고 행 프레임에 대해 집계하는 기능은 무엇일까요?

복습

Spark에서 데이터를 집계했습니다:

  • count, sum, avg, min, max와 함께 사용하는 agg
  • groupBy, 여러 집계, having 필터
  • pivot과 윈도 함수
  • RDD의 reduceByKey / aggregateByKey

Apache Spark 과정을 완료했습니다.

무료로 시작

AI 튜터와 함께 Scala을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
39
레슨
143

자주 묻는 질문

“집계” 강의는 무료인가요?

네 — “집계” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Scala for Backend Engineering & Functional Programming 강의 전체를 잠금 해제할 수 있습니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

“집계”에서 뭘 배우나요?

그룹화하고 집계합니다 브라우저에서 직접 실행하는 실습 코드로 Scala for Backend Engineering & Functional Programming을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Scala for Backend Engineering & Functional Programming을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Scala for Backend Engineering & Functional Programming은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“집계” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Scala for Backend Engineering & Functional Programming 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Scala for Backend Engineering & Functional Programming 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. RDD와 DataFrames
  2. 변환과 액션
  3. Spark SQL
  4. 집계
← Scala for Backend Engineering & Functional Programming(으)로 돌아가기