Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

중복 제거, 결측 행 제거와 정렬

이 메서드들은 원본 DataFrame을 변경하지 않고 새 DataFrame을 반환합니다. 선택한 결과를 다음 연산에 연결하거나 출력에 써야 합니다.

distinct와 drop_duplicates

df.distinct()는 전체 열 값이 같은 중복 행을 제거합니다. df.drop_duplicates(subset=None)도 기본적으로 전체 열을 기준으로 하며, subset을 주면 지정한 열 조합만 비교합니다. dropDuplicates()는 같은 API의 다른 이름입니다.

def unique_rows(df):
    return df.distinct()


def unique_people(df):
    return df.drop_duplicates(["firstname", "lastname"])

이름이 같은 여러 행에서 다른 열 값이 다르면 subset 중복 제거가 어느 행을 남길지 원하는 업무 순서를 보장하지 않습니다. 최신 행을 선택하려면 실제 순서 열과 동률 처리 기준을 가진 window 계산을 사용합니다.

dropna

df.dropna(how="any", thresh=None, subset=None)와 df.na.drop(...)는 같은 결측 행 제거 기능입니다.

인자기본값의미
how"any"any는 대상 열 중 결측값이 하나라도 있으면 제거, all은 대상 열이 모두 결측이면 제거
threshNone지정한 수보다 유효 값이 적은 행을 제거. how보다 우선
subsetNone검사할 열 목록. 생략하면 전체 열
def require_names(df):
    return df.dropna(how="any", subset=["firstname", "lastname"])


def require_two_values(df):
    return df.dropna(thresh=2, subset=["firstname", "lastname", "email"])

첫 함수는 두 이름 열 모두 있어야 행을 남깁니다. 두 번째는 세 대상 열 중 최소 두 값이 있어야 합니다.

limit

df.limit(number)는 최대 number개 행을 가진 DataFrame을 반환합니다. 전체 데이터가 그보다 적으면 있는 행만 남습니다. 정렬하지 않은 limit을 특정한 첫 행이나 최신 행의 선택으로 해석하지 않습니다.

sort와 orderBy

df.sort(*cols, **kwargs)와 df.orderBy(*cols, **kwargs)는 같은 정렬 API입니다. Column.asc()/Column.desc() 또는 F.asc()/F.desc()로 방향을 지정할 수 있습니다.

from pyspark.sql import functions as F


def sorted_people(df):
    return df.sort(F.asc("lastname"), F.col("firstname").desc())


def first_hundred_names(df):
    return (
        df.select("firstname", "lastname")
        .dropna(subset=["firstname", "lastname"])
        .distinct()
        .orderBy(F.col("lastname").asc(), F.col("firstname").asc())
        .limit(100)
    )

분산 정렬은 데이터 이동을 수반할 수 있으므로 출력이나 계산에 순서가 필요한 경우에 적용합니다. 같은 정렬 키를 가진 행의 순서까지 필요하면 추가 동률 해소 키를 지정합니다.

행 선택과 함께 사용하는 값 변환은 날짜와 Timestamp, 문자열, 숫자 계산, 중첩 자료와 JSON에서 설명합니다.