숫자 다루기: 산술 연산과 통계 함수
Spark: The Definitive Guide (Excerpts, Databricks Preview, 2017) — Chapters 2-6 — Bill Chambers & Matei Zaharia Chapter 6: Working with Numbers 절 (PDF pp.91-96)
이 모듈을 다 읽으면
- pow, round/bround, corr, describe, approxQuantile 등 숫자 관련 함수의 용도를 구분해 설명할 수 있다
- round과 bround의 반올림 방향 차이를 설명할 수 있다
- describe가 반환하는 요약 통계 항목과 그 사용상 주의점을 설명할 수 있다
필터링 다음으로 빈번한 작업은 숫자 계산이다. pow로 거듭제곱을, round/bround로 반올림/반내림을 수행하며, corr로 두 컬럼 간 피어슨 상관계수를, describe로 count·mean·stddev·min·max 요약 통계를 얻을 수 있다. approxQuantile로 근사 분위수를, crosstab·freqItems로 교차표와 빈발 항목을 계산할 수 있으며, 이 모든 것은 DataFrame 메서드·SQL 표현식·stat 서브패키지 어느 쪽으로도 동일하게 표현할 수 있다.
산술 연산과 pow
숫자형 컬럼끼리는 곱셈·덧셈·뺄셈 등을 자연스럽게 표현할 수 있다. 컬럼을 거듭제곱하려면 pow 함수를 쓴다. 예를 들어 (Quantity * UnitPrice)의 제곱에 5를 더하는 연산은 pow(col("Quantity") * col("UnitPrice"), 2) + 5로 표현하며, 이는 SQL의 POWER((Quantity * UnitPrice), 2.0) + 5 as realQuantity와 동등하다.
from pyspark.sql.functions import expr, pow
fabricatedQuantity = pow(col("Quantity") * col("UnitPrice"), 2) + 5
df.select(expr("CustomerId"), fabricatedQuantity.alias("realQuantity")).show(2)
핵심 포인트
- 숫자형 컬럼은 사칙연산을 그대로 표현식으로 쓸 수 있고, 거듭제곱은 pow 함수(SQL의 POWER)로 수행한다
반올림: round vs bround
정수로 그냥 반올림하고 싶다면 캐스팅만으로도 충분하지만, 특정 소수 자리까지 정밀하게 반올림하려면 round와 bround를 쓴다. round(col, 1)처럼 반올림할 자릿수를 지정한다.
중요한 차이는 두 수 사이 정확히 중간값(예: 2.5)을 처리하는 방식이다. round는 기본적으로 올림(round up) 방향으로 처리하는 반면, bround는 내림(round down) 방향으로 처리한다.
핵심 포인트
- 정밀한 반올림에는 round(컬럼, 자릿수)를 쓰고, 정수 반올림 정도면 캐스팅만으로 충분하다
- 두 값의 정중앙(예: 2.5)에서 round는 올림, bround는 내림 방향으로 처리한다는 점이 핵심 차이다
상관계수와 요약 통계
두 컬럼 간 관계를 보려면 피어슨 상관계수(Pearson Correlation Coefficient)를 corr 함수 또는 df.stat.corr("col1", "col2") 메서드로 계산한다.
요약 통계는 describe() 메서드로 한 번에 얻을 수 있다. 모든 숫자형 컬럼에 대해 count, mean, stddev, min, max를 계산해 보여주는데, 이는 콘솔에서 눈으로 확인하는 용도로 주로 쓰이며 스키마가 향후 바뀔 수 있다는 점에 유의해야 한다. 동일한 정확한 수치가 필요하다면 count, mean, stddev_pop, min, max 함수를 직접 import해 집계(aggregation)로 계산하면 된다.
핵심 포인트
- 두 컬럼의 피어슨 상관계수는 corr 함수 또는 df.stat.corr(col1, col2)로 계산한다
- describe()는 숫자 컬럼들의 count/mean/stddev/min/max를 한 번에 보여주지만 콘솔 확인용이며 스키마가 바뀔 수 있어, 정확한 수치가 필요하면 개별 집계 함수를 직접 써야 한다
통계 서브패키지: 분위수, 교차표, 빈발 항목
DataFrameStatFunctions(df.stat)에는 다양한 통계 메서드가 있다. approxQuantile(컬럼명, 분위수 배열, 허용오차)는 정확하거나 근사한 분위수를 계산한다. crosstab은 두 컬럼 간 교차표(cross tabulation)를, freqItems는 빈발 항목(frequent item pairs)을 계산하는데, 이 두 결과는 카디널리티에 따라 매우 커질 수 있으므로 주의가 필요하다.
그 외에도 stat 서브패키지를 통해 블룸 필터(Bloom Filter)나 Count-Min Sketch 같은 확률적 자료구조를 구성하는 기능도 제공된다.
핵심 포인트
- approxQuantile(컬럼, 분위수 배열, 허용오차)로 근사/정확 분위수를 얻을 수 있다
- crosstab(교차표)과 freqItems(빈발 항목)는 결과가 커질 수 있어 사용에 주의해야 한다
- stat 서브패키지로 Bloom Filter, Count-Min Sketch 같은 확률적 자료구조도 만들 수 있다