숫자 열 계산
아래 연산은 from pyspark.sql import functions as F로 가져옵니다. 숫자 열을 대상으로 Spark 표현식을 만들며, Python으로 전체 값을 가져와 계산할 필요가 없습니다.
반올림과 정수 경계
| 함수 | 의미 |
|---|---|
F.bround(x, scale=0) | HALF_EVEN 반올림. 정확한 중간값은 짝수 쪽으로 처리 |
F.round(x, scale=0) | HALF_UP 반올림 |
F.ceil(x) | 올림 |
F.floor(x) | 내림 |
F.rint(x) | 가장 가까운 수학적 정수 값을 double로 반환 |
round/bround의 scale이 0 이상이면 소수 자리, 음수이면 정수부의 자릿수에서 반올림합니다. 예를 들어 scale 0의 HALF_EVEN에서 2.5는 2, HALF_UP에서는 3입니다.
로그와 지수
| 함수 | 의미 |
|---|---|
F.log(x) | 자연로그 |
F.log(base, x) | 지정한 밑의 로그 |
F.log10(x) | 밑이 10인 로그 |
F.log1p(x) | ln(1+x) |
F.exp(x) | e**x |
F.expm1(x) | e**x - 1 |
log의 인자가 둘이면 첫 번째가 밑이고 두 번째가 대상 열입니다.
난수
F.rand(seed=None)는 0 이상 1 미만인 균등분포의 독립 동일 분포 난수 열을 만듭니다. 1은 포함하지 않습니다. F.randn(seed=None)는 표준 정규분포의 난수 열을 만듭니다.
seed는 난수 생성에 사용합니다. 이 함수들은 일반적으로 비결정적이며 분산 행에 영구적인 업무 식별자를 부여하는 방법으로 사용하지 않습니다.
삼각함수와 각도
| 함수 | 의미 |
|---|---|
F.cos(x), F.sin(x), F.tan(x) | 라디안 각도의 코사인, 사인, 탄젠트 |
F.acos(x) | 역코사인, 결과 범위 0~π |
F.asin(x) | 역사인, 결과 범위 -π/2~π/2 |
F.atan(x) | 역탄젠트 |
F.atan2(y, x) | 직교좌표 (x,y)의 극각. 첫 인자는 y축, 둘째는 x축 좌표 |
F.cosh(x), F.sinh(x), F.tanh(x) | 쌍곡 코사인, 사인, 탄젠트 |
F.degrees(x) | 라디안을 도로 변환 |
F.radians(x) | 도를 라디안으로 변환 |
atan2의 인자 순서를 좌표 표기 (x,y)의 순서와 혼동하지 않습니다.
절댓값, 거듭제곱과 열별 극값
| 함수 | 의미 |
|---|---|
F.abs(x) | 절댓값 |
F.cbrt(x) | 세제곱근 |
F.sqrt(x) | 제곱근 |
F.factorial(x) | 팩토리얼 |
F.pow(x, y) | x의 y 거듭제곱 |
F.hypot(x, y) | 중간 제곱의 overflow/underflow를 피하며 sqrt(x*x+y*y) 계산 |
F.signum(x) | 부호 함수 |
F.greatest(*cols) | 여러 열 중 가장 큰 값, NULL 건너뜀 |
F.least(*cols) | 여러 열 중 가장 작은 값, NULL 건너뜀 |
다음 함수는 x/y 숫자 열과 amount 숫자 열을 받아 계산한 열을 반환합니다.
from pyspark.sql import functions as F
def numeric_features(df):
return df.select(
F.bround("amount", 2).alias("rounded_amount"),
F.hypot("x", "y").alias("radius"),
F.atan2("y", "x").alias("angle_radians"),
F.pow("x", F.lit(2)).alias("x_squared"),
F.greatest("x", "y").alias("larger_coordinate"),
)