Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Workbook 사용 문제와 계산 비용

다른 Workbook으로 옮기기

선택한 노드들을 오른쪽 클릭 메뉴로 복사하고 대상 그래프에 Cmd+V 또는 Ctrl+V로 붙여 넣을 수 있습니다. 여러 노드는 macOS의 Cmd 또는 Windows의 Ctrl을 누르며 선택합니다. Contour board 노드는 이 복사 및 붙여넣기를 지원하지 않습니다.

스칼라 변수와 출력 유형

변환 하나를 임의의 숫자나 문자열 변수로 반환하여 하위 입력에 연결하는 방식은 지원하지 않습니다. 표 데이터는 DataFrame으로 반환해야 하며, 값 하나만 전달하려면 한 행과 한 열의 표로 표현할 수 있습니다.

표 외에는 언어별로 지원하는 모델 FoundryObject나 시각화 전용 None 및 NULL 경로가 있습니다. None과 NULL은 하위 변환 입력으로 사용할 수 없습니다. 모든 노드가 반드시 저장된 데이터셋이어야 하는 것은 아니며 입출력 유형과 선택적 저장을 구분합니다.

저장할 표에는 유효한 스키마가 필요합니다. 열이 하나 이상이고 이름이 중복되지 않아야 하며, 공백이나 특수문자 등 해당 출력 형식에서 허용하지 않는 이름을 피해야 합니다.

환경 초기화와 유휴 시간

초기화 시간의 일반적인 예는 기본 구성에서 약 3~5분, 추가 패키지가 복잡한 구성에서 20~30분입니다. 고정된 완료 시간은 아니며 warm module, 캐시, 자원 대기와 의존성 해석에 따라 달라집니다.

브라우저 탭이 30분 이상 비활성 상태이면 환경을 잃을 수 있습니다. 작업을 이어갈 때 모듈 상태와 필요한 재실행을 확인합니다. 환경 구성과 문제 해결에서 패키지를 줄이고 호환되는 버전을 선택할 수 있습니다.

삭제한 코드 복원

숨겨진 Code Repository의 브랜치 및 commit 이력을 먼저 확인합니다. 저장되지 않은 중간 노드의 코드도 이력에 남아 있다면 복구할 수 있습니다.

이전에 데이터셋으로 빌드한 변환은 Dataset Preview의 Compare에서 당시 코드도 볼 수 있습니다. 다른 Workbook 브랜치에 남은 버전을 확인하는 방법도 있습니다. 찾은 코드를 Workbook에 복사하여 복원합니다.

필요한 Python 라이브러리

Conda Forge는 Workbook에서 패키지를 찾는 기본 경로 중 하나입니다. 실제 사용 가능 여부는 해당 환경의 채널, 프로젝트 참조와 권한에 따라 확인합니다.

  1. Environment > Customize Environment를 엽니다.
  2. 패키지를 검색하여 automatic 또는 필요한 버전을 추가합니다.
  3. Update Spark environment를 선택합니다.

Automatic은 새 버전을 해석할 수 있어 의도하지 않은 변경의 영향을 받을 수 있습니다. 사용자 지정 환경은 기본 warm pool과 일치하지 않아 더 오래 걸릴 수 있습니다.

목록에 없다면 같은 기능을 제공하는 다른 패키지가 있는지 확인하고, 꼭 필요한 라이브러리는 Palantir 지원팀에 제공을 요청합니다. 사용할 수 있게 된 뒤 환경에 추가합니다.

환경 생성 실패

Waiting for Spark / Initializing environment 뒤 Failed to create environment가 나타나면 최근 사용자 지정 패키지와 pin을 확인합니다. 불필요한 pin을 완화하거나 새 패키지를 제거하여 충돌을 좁힙니다. 특정 패키지에서 계속 막히면 그 조건과 로그를 지원팀에 제공합니다.

단순히 모든 버전을 최신으로 바꾸기보다 의존성 해석과 런타임 호환성을 구분하여 조사합니다.

Python Retryer 오류

다음과 같은 오류가 기본 명령이나 import에서 나타날 수 있습니다.

com.github.rholder.retry.RetryException:
Retrying failed to complete successfully after 3 attempts.
at com.github.rholder.retry.Retryer.call(Retryer.java:174)

Pandas 입력을 사용하는 경우 Workbook이 먼저 Spark DataFrame을 Pandas로 변환하며 데이터를 드라이버에 모읍니다. 이 과정의 메모리 부족이 원인일 수 있으므로, 오류 문자열만 보고 특정 Python import가 문제라고 단정하지 않습니다.

Pandas 입력과 변환 단계의 로그를 확인합니다. Spark로 가능한 계산은 먼저 분산 처리하고 결과를 줄입니다. 꼭 드라이버에서 계산해야 하면 필요한 크기에 맞춰 드라이버 메모리가 큰 프로필을 사용합니다.

데이터셋 저장 실패

표 출력의 반환값과 스키마를 먼저 확인합니다. 열 존재 여부, 이름의 유효성과 중복을 검사합니다.

다른 단순 변환이 저장되는지 비교하면 특정 노드의 로직 문제인지 전체 환경이나 저장 경로의 문제인지 구분하는 데 도움이 됩니다. 특정 노드이면 코드를 조사하고 여러 노드에서 공통 실패하면 관련 로그와 조건을 지원팀에 전달합니다. 빌드 및 checks 오류도 함께 확인할 수 있습니다.

입력 미리보기를 갱신해도 하위가 바뀌지 않음

Update table preview는 입력 데이터셋의 화면을 갱신합니다. Foundry 원천 데이터셋을 빌드하거나 모든 하위 변환을 자동 실행하는 작업이 아닙니다.

입력 데이터가 오래되었다면 원천 데이터셋의 빌드 실패 여부를 먼저 확인합니다. 원천은 최신인데 Workbook 미리보기와 다르면 입력 노드를 제거한 뒤 다시 추가하는 방법을 검토합니다. 이 작업 전 후속 연결을 확인해야 합니다. 계속 다르면 원천과 화면의 차이를 지원팀에 제공합니다.

하위 변환을 갱신하려면 Run all을 선택합니다. 변환의 의존 순서를 따라 실행합니다.

Master로 병합할 수 없음

보호 브랜치이면 필요한 권한을 가진 사용자에게 병합을 요청합니다. Workbook의 내부 브랜치 권한은 다음과 같습니다.

권한역할과 작업
view기본적으로 compass:read에서 부여합니다.
edit기본적으로 compass:edit에서 부여하며 브랜치 생성과 부모로의 병합 준비에 필요합니다.
maintain보호 브랜치로 실제 병합할 때 필요합니다. 기본적으로 compass:manage에 포함됩니다.
manage브랜치 보호 설정을 바꿀 때 필요합니다. 기본적으로 compass:manage에 포함됩니다.

기본 Owner가 maintain과 manage를 가지며, 단순 Editor는 보호 브랜치 병합을 할 수 없습니다. 사용자 지정 역할에서는 실제 권한을 확인합니다.

보호 여부와 별도로 충돌이 있으면 병합 화면에서 해결해야 합니다. 보호나 충돌 문제가 없는데도 실패하면 오류와 브랜치 상태를 지원팀에 제공합니다.

반복 계산을 빠르게 하기

예를 들어 1,000행×30열과 100만 행×30열을 입력으로 받아 여러 window와 파생 열을 계산할 때는 전체 과정을 매번 다시 실행하는 비용을 줄입니다.

저장 경계로 단계 분리

세 계산 단계의 비용을 각각 C1, C2, C3라고 하고 각 단계의 로직을 맞추기 위해 네 번씩 반복한다고 가정합니다.

구성계산 비용의 단순 모델
앞선 계산을 매번 포함하는 큰 노드 하나12 × C1 + 8 × C2 + 4 × C3
확정한 중간 결과를 저장하고 다음 단계를 반복4 × C1 + 4 × C2 + 4 × C3

세 단계의 비용이 같다면 계산량은 24단위와 12단위입니다. 이는 반복 계산만을 비교한 예이며 저장 및 읽기 비용까지 포함한 실제 실행 시간이 반드시 두 배 빨라진다는 보장은 아닙니다.

노드를 나누기만 하고 모두 저장하지 않으면 상위 로직이 재실행될 수 있습니다. 재사용할 결과의 persistence 경계를 함께 정해야 합니다.

작은 입력 캐시

작은 데이터셋의 Actions > Cache를 선택하면 Workbook에서 행을 메모리에 유지하여 저장소에서 다시 읽는 비용을 줄일 수 있습니다.

작다는 기준은 사용 가능한 메모리와 데이터 모양에 따라 달라집니다. 너무 크면 경고가 나타납니다. 모든 입력을 무조건 캐시하지 않습니다.

Spark 기본 연산과 샘플

가능하면 기본 PySpark 연산으로 조건, 집계와 열 계산을 표현합니다. 행별 Python 반복이나 UDF에는 실행 경계와 직렬화 비용이 있으므로 기본 연산으로 같은 의미를 표현할 수 없는 경우에 사용합니다.

큰 입력의 로직을 개발할 때는 목적에 맞는 대표 샘플을 만들고 작은 샘플을 캐시하면 반복 시간이 줄어듭니다. 100만 행 이상은 샘플링을 검토할 수 있는 규모의 예이지 Spark의 지원 한도가 아닙니다. 로직을 정리한 뒤에는 전체 데이터와 필요한 경계 사례로 동작을 확인해야 합니다.