Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

여러 노드와 공유 매개변수 묶기

Multi-node template은 여러 템플릿을 하나의 워크플로로 묶고 서로 같은 값을 써야 하는 매개변수를 연결합니다. 두 수치 열을 고른 뒤 산점도와 조건별 생존 분포를 만드는 Titanic 예제로 구성합니다.

세 개의 기본 템플릿

다음 코드는 매개변수화하기 전의 Workbook 노드 예입니다. 입력 titanic_dataset에는 Age, Fare, Survived가 있어야 합니다. 먼저 단일 노드 템플릿 절차로 각 코드의 입력, 열 이름과 임계값을 매개변수로 바꿉니다.

수치 열 선택

첫 노드 alias를 filter_dataset으로 하고 Spark dataframe 입력을 사용합니다. 이름은 Filter이며 두 수치 열과 Survived를 선택합니다.

def filter_dataset(titanic_dataset):
    col1 = "Age"
    col2 = "Fare"
    return titanic_dataset.select(col1, col2, "Survived")

Dataset 입력과 두 문자열을 각각 titanic_dataset, col1, col2 매개변수로 지정합니다. 두 열 매개변수의 원천은 입력 데이터셋입니다.

산점도

두 번째 노드는 첫 결과를 Pandas dataframe으로 읽습니다. 입력이 드라이버 메모리에 들어갈 만큼 작아야 합니다.

@synchronous_node_execution
def scatterplot(filter_dataset):
    import matplotlib.pyplot as plt

    col1 = "Age"
    col2 = "Fare"
    fig, ax = plt.subplots()
    ax.scatter(filter_dataset[col1], filter_dataset[col2])
    ax.set_xlabel(col1)
    ax.set_ylabel(col2)
    plt.show()
    plt.close(fig)
    return filter_dataset

템플릿 이름을 Scatterplot으로 정하고 두 열 이름도 Column 매개변수로 지정합니다.

필터 후 생존 히스토그램

세 번째 노드는 첫 결과를 Spark dataframe으로 읽습니다. 다음 18과 10은 예제 임계값이며 매개변수로 바꿔 사용할 수 있습니다. 두 조건은 모두 엄격한 초과 비교입니다.

@synchronous_node_execution
def filter_then_histogram(filter_dataset):
    import matplotlib.pyplot as plt
    from pyspark.sql import functions as F

    col1 = "Age"
    col2 = "Fare"
    cutoff1 = 18
    cutoff2 = 10
    selected = filter_dataset.filter(
        (F.col(col1) > cutoff1) & (F.col(col2) > cutoff2)
    )
    local = selected.select("Survived").toPandas()
    fig, ax = plt.subplots()
    ax.hist(local["Survived"].dropna())
    ax.set_xlabel("Survived")
    ax.set_ylabel("Count")
    plt.show()
    plt.close(fig)
    return selected

col1, col2는 Column, cutoff1, cutoff2는 Number로 정합니다. Filter then histogram 템플릿으로 저장합니다. 그림은 생존값의 분포이며 반환한 표에는 필터를 통과한 행이 남습니다.

Matplotlib을 쓰는 두 노드에는 Workbook의 @synchronous_node_execution을 적용하여 동시에 실행할 때 라이브러리 상태가 섞이지 않도록 합니다.

Multi-node template 생성

세 템플릿을 선택하고 오른쪽 클릭의 Create new template을 누릅니다.

Filter의 col1을 선택하고 Create shared parameter를 누릅니다.

오른쪽에 만든 col1의 원천 데이터셋을 titanic_dataset으로 지정합니다. 다른 두 템플릿의 col1도 이 Multi-node 매개변수에 연결합니다. col2도 같은 방식으로 묶고 저장합니다.

그룹의 값 변경

자식 Filter 노드의 col1, col2 옆에는 그룹에서 제어한다는 아이콘이 나타납니다.

위의 View Group에서 그룹 노드와 공유 매개변수를 확인합니다. 여기서 값을 바꾸면 세 노드의 모든 연결 지점이 같이 바뀝니다.

자식 노드에서 공유값을 바꿔도 그룹의 나머지 인스턴스에 같은 변경이 적용됩니다.

다른 열로 재사용

새 Multi-node 템플릿 인스턴스를 추가합니다.

공유 열을 Fare와 Pclass로 바꾸면 세 노드 모두 새 열을 사용합니다. CSV의 실제 열 이름은 대소문자를 포함하여 Pclass입니다.

Filter then histogram의 임계값도 새 열의 의미에 맞게 바꾸고 실행합니다. 공유 열을 바꾸는 작업과 각 노드의 수치 조건을 정하는 작업은 구분해야 합니다.