데이터 통합PythonIncremental transforms전체보기

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

전체보기

점진적 계산은 결과물 데이터셋을 생성하기 위해 변환을 수행하는 효율적인 방법입니다. 변환의 빌드 이력을 활용함으로써, 점진적 계산은 변환이 실행될 때마다 전체 결과물 데이터셋을 다시 계산할 필요를 피할 수 있습니다.

점진적 파이프라인을 생성하고 관리하는 방법에 대한 종합적인 안내를 위해, 파이프라인 빌드 섹션을 참조하십시오.

예시: 비점진적 및 점진적 변환

이 섹션에서는 점진적 변환을 사용하지 않는 코드 예시를 먼저 고려하여 점진적 변환의 장점을 살펴봅니다:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 from transforms.api import transform, Input, Output @transform( students=Input('/examples/students_hair_eye_color'), processed=Output('/examples/hair_eye_color_processed') ) def filter_hair_color(students, processed): # type: (TransformInput, TransformOutput) -> None students_df = students.dataframe() # 이것은 비효율적인 방법입니다. 왜냐하면 필터 함수가 새로운 데이터에 대해서만 수행되는 것이 아니라 전체 입력에 대해 수행되기 때문입니다. processed.write_dataframe(students_df.filter(students_df.hair == 'Brown'))

새로운 데이터가 /examples/students_hair_eye_color 입력 데이터셋에 추가되면, filter()는 입력된 전체 대상으로 수행되며, 단순히 입력에 추가된 새로운 데이터만을 대상으로 하는 것이 아닙니다. 이는 계산 자원과 시간을 낭비하는 것입니다.

변환(Transform)이 빌드 이력을 인식하게 될 경우, 결과물을 계산하는 방법에 대해 더욱 똑똑해질 수 있습니다. 보다 구체적으로는, 입력에 대한 변경사항을 사용하여 결과물 데이터셋을 수정할 수 있습니다. 이렇게 이미 구체화된 데이터를 다시 테이블화할 때 사용하는 과정을 점진적 계산이라고 합니다. 점진적 계산 없이는 결과물 데이터셋이 항상 최신 변환 결과물로 대체됩니다.

위에서 보여준 예시 변환으로 돌아가 보겠습니다. 변환은 students 데이터셋에 대해 filter()를 수행하여 갈색 머리의 학생들만을 출력으로 작성합니다. 점진적 계산을 사용하면, students에 대한 두 명의 새로운 학생 데이터가 추가되면, 변환은 빌드 이력에 대한 정보를 사용하여 새로운 갈색 머리 학생만을 결과물에 추가할 수 있습니다:

+---+-----+-----+------+                  +---+-----+-----+------+
| id| hair|  eye|   sex|                  | id| hair|  eye|   sex|
+---+-----+-----+------+     빌드 1      +---+-----+-----+------+
| 17|Black|Green|Female|    --------->    | 18|Brown|Green|Female|
| 18|Brown|Green|Female|                  +---+-----+-----+------+
| 19|  Red|Black|Female|
+---+-----+-----+------+
        ...                                         ...
+---+-----+-----+------+     빌드 2      +---+-----+-----+------+
| 20|Brown|Amber|Female|    --------->    | 20|Brown|Amber|Female|
| 21|Black|Blue |Male  |                  +---+-----+-----+------+
+---+-----+-----+------+

위의 예제 변환은 다음 구문을 사용하여 점진적 로직으로 다시 작성할 수 있습니다:

Copied!
1 2 3 4 5 6 7 8 9 10 11 from transforms.api import transform, incremental, Input, Output @incremental() @transform( students=Input('/examples/students_hair_eye_color'), # students라는 이름으로 '/examples/students_hair_eye_color'을 입력으로 받습니다. processed=Output('/examples/hair_eye_color_processed') # 처리된 결과를 '/examples/hair_eye_color_processed'로 출력합니다. ) def filter_hair_color(students, processed): # type: (IncrementalTransformInput, IncrementalTransformOutput) -> None # 이 함수의 입력은 IncrementalTransformInput 타입의 students와 IncrementalTransformOutput 타입의 processed이며, 반환 값은 없습니다(None). students_df = students.dataframe('added') # students의 데이터를 데이터프레임으로 변환하고, 'added'라는 이름으로 저장합니다. processed.write_dataframe(students_df.filter(students_df.hair == 'Brown')) # 데이터프레임에서 머리 색깔(hair)이 'Brown'인 학생들만 필터링하고, 그 결과를 processed에 씁니다.

점진적 변환과 @incremental 데코레이터에 대한 자세한 정보는 점진적 변환 출처를 참조하십시오.

데이터셋 중 하나가 완전히 읽히는 참조 표이고 다른 하나가 점진적으로 읽히는 점진적 데이터셋인 경우 조인을 계산하는 것이 안전합니다. 그러나 조인에 참여하는 두 데이터셋을 모두 점진적으로 읽는 것은 특별한 처리가 필요하며, 예제 큰 데이터셋 결합을 위한 점진적 변환 활용을 참조하십시오.

경량 변환과 함께 사용하기

점진적 계산은 이제 경량 변환에서 지원됩니다. 아래에 있는 예제 경량 점진적 변환을 확인하십시오.