데이터 통합PythonPySpark Reference조인

본 번역은 검증되지 않았습니다. AIP를 통해 영문원문으로부터 번역되었습니다.

조인

PySpark의 DataFrame은 SQL 테이블처럼 다른 데이터 프레임 또는 자체에 조인될 수 있습니다. 데이터 프레임은 .join() 메소드를 사용하여 다른 데이터 프레임과 조인됩니다. 이 메소드는 DataFrame, 조인 제약 조건(예: 조인할 열의 이름) 및 메소드(left, right, inner 등)를 사용합니다.

간단한 왼쪽 조인

Copied!
1 2 # 'key'를 기준으로 'df_left'와 'df_right'를 왼쪽 조인합니다. df_joined = df_left.join(df_right, 'key', 'left')

df_joined는 이제 df_left.key == df_right.key에 대한 왼쪽 조인의 결과입니다. PySpark는 자동으로 key 열의 사본 중 하나를 삭제하여 df_joined에는 key라는 이름의 열이 하나만 포함되게 합니다.

df_leftdf_right에서 조인할 키가 같은 이름을 가지고 있지 않다면, 조인을 수행하기 전에 먼저 이름을 바꾸는 것이 권장됩니다.

이름 충돌

조인을 완료하면 충돌이 발생하기 때문에 명시적으로 조인하지 않은 동일한 이름을 가진 모든 필드를 이름을 바꾸거나 삭제해야 합니다. DataFrame의 모든 열은 다음과 같이 루프 내에서 특정 접두사로 이름을 바꿀 수 있습니다.

Copied!
1 2 3 4 # 'df.columns'를 통해 데이터프레임의 모든 열을 순회합니다. for column in df.columns: # 'withColumnRenamed' 함수를 이용해 각 열의 이름을 'some_prefix_'가 추가된 이름으로 변경합니다. df = df.withColumnRenamed(column, 'some_prefix_' + column)

여러 필드를 사용한 조인

.join() 메소드는 하나의 필드 대신 조인할 필드 목록을 사용할 수 있습니다.

Copied!
1 2 3 # 'df_left' 데이터프레임에 'df_right' 데이터프레임을 조인합니다. # 조인 기준은 'column1', 'column2', 'column3' 열이며, 왼쪽 조인을 수행합니다. df_joined = df_left.join(df_right, ['column1', 'column2', 'column3'], 'left')

df_joined는 이제 column1, column2column3에 대한 조인입니다. 다시 말해, 이는 df_leftdf_right 사이에 열 이름이 일관되다는 가정하에 진행됩니다.

고급 임의 조인 제약 조건

PySpark는 논리 연산자를 사용하여 임의의 표현식을 사용한 조인을 지원합니다. 열 ID에 대해 조인하려고 하고, 왼쪽 DataFrame의 날짜 start가 오른쪽 DataFrame의 날짜 end 이전이며, 특정 필드 X의 내용에 따라 오른쪽 DataFrameY가 또 다른 값을 포함하는지 여부를 요구하거나 요구하지 않을 수 있다고 가정해 봅시다.

Copied!
1 2 3 4 5 6 7 # 한글 주석 key_constraint = df_left.ID == df_right.ID # 왼쪽 데이터 프레임의 ID와 오른쪽 데이터 프레임의 ID가 같은지 확인 date_constraint = df_left.start < df_right.end # 왼쪽 데이터 프레임의 시작 날짜가 오른쪽 데이터 프레임의 종료 날짜보다 이전인지 확인 case_constraint = F.when(df_left.X == 'some_value', df_right.Y == 'some_other_value')\ .otherwise(True) # 왼쪽 데이터 프레임의 X 값이 'some_value'일 경우, 오른쪽 데이터 프레임의 Y 값이 'some_other_value'와 같은지 확인. 그렇지 않으면 True 반환 combined_constraints = key_constraint & date_constraint & case_constraint # 모든 제약 조건을 결합 df_joined = df_left.join(df_right, combined_constraints, 'left') # 왼쪽 데이터 프레임에 오른쪽 데이터 프레임을 결합 (조건에 맞는 행만)

교차 조인 (카르테지안 곱)

키 또는 다른 제약 조건에 의한 일치 없이 두 데이터프레임 사이의 행의 모든 조합을 생성하기 위해 교차 조인을 사용하십시오. 이는 카르테지안 곱으로도 알려져 있습니다. 교차 조인은 메모리와 성능 문제를 초래할 위험이 있으므로 가능한 한 피해야 합니다.

:::callout{theme=경고 제목="경고"} 결과를 즉시 필터링하려는 경우 교차 조인을 사용하지 마십시오. 대신, 더 효율적인 해결책을 위해 조인 제약 조건에 필터 기준을 포함시키십시오 (위의 고급 임의의 조인 제약 조건 참조). :::

교차 조인을 사용하려면 Code Repositories에서 명시적으로 프로필 CROSS_JOIN_ENABLED가져와야 합니다.

Copied!
1 2 3 4 5 6 7 8 9 10 from transforms.api import configure # 프로필에 "CROSS_JOIN_ENABLED"를 추가하여 크로스 조인 작업이 가능하도록 설정합니다. @configure(profile=["CROSS_JOIN_ENABLED"]) @transform_df( ... ) def my_compute_function(input_a, input_b): # input_a와 input_b를 크로스 조인하여 결과를 반환합니다. return input_a.crossJoin(input_b)