노트북에서 Spark DataFrame 시각화

Managed Service for Apache Spark와 함께 google-colabsqlviz Python 패키지를 사용하여 Google Cloud Data Agent Kit (DAK)를 비롯한 Jupyter 노트북에서 PySpark DataFrame을 대화형으로 탐색할 수 있습니다. anywidget를 기반으로 빌드되고 데이터 스튜디오 차트 엔진으로 구동되는 google-colabsqlviz는 플로팅 코드 없이 노트북 셀 출력 내에서 대화형 시각화를 렌더링합니다.

DataFrame을 google-colabsqlviz에 전달하면 차트와 데이터 테이블 뷰 간에 전환하고, 측정기준과 측정항목을 구성하고, 집계를 적용하고, 데이터를 대화형으로 정렬하거나 필터링하고, 필터링되거나 집계된 차트 데이터를 새 DataFrame으로 내보낼 수 있습니다.

  • 멀티 엔진 DataFrame 지원: 하나의 API를 사용하여 pyspark.sql.DataFrame(Spark Connect DataFrame 포함), bigframes.pandas.DataFrame, pandas.DataFrame 객체를 시각화합니다.
  • 커널 내 및 분산 실행: 위젯이 Google의 CDN에서 데이터 스튜디오 차트 UI를 로드하지만 기본 데이터는 데이터 스튜디오로 전송되지 않습니다. 모든 집계와 필터는 Python 커널 또는 Managed Service for Apache Spark 세션에서 실행되며 차트는 노트북 클라이언트에서 로컬로 렌더링됩니다.
  • 환경 충돌 없음: pyspark 및 bigframes와 같은 선택적 분산 엔진은 런타임에 감지되며 google-colabsqlviz를 설치할 때 업그레이드되거나 덮어쓰이지 않습니다.

시작하기 전에

google-colabsqlviz를 사용하여 Spark Connect를 통해 PySpark DataFrame을 렌더링하는 기능은 서버리스 런타임 버전 3.0 이상을 사용하는 Managed Service for Apache Spark 대화형 세션에서 지원됩니다.

다음 안내에 따라 Data Agent Kit를 사용하여 Visual Studio Code (VS Code)에서 노트북을 만들거나 JupyterLab과 같은 다른 지원되는 Jupyter 노트북 환경을 사용합니다.

  1. Data Agent Kit (DAK)를 설정하고 구성합니다.
    1. Data Agent Kit 확장 프로그램을 설치합니다.
    2. Data Agent Kit를 구성합니다.
    3. 필요한 Identity and Access Management (IAM) 역할이 있는지 확인합니다.
  2. 노트북을 만듭니다.
    1. VS Code 작업 표시줄에서 Data Agent Kit를 클릭하고 Apache Spark를 펼친 후 + 새 Spark 노트북을 선택합니다.
    2. 커널 유형 선택에서 로컬 커널을 클릭합니다.
    3. 서버리스 런타임 템플릿을 선택하려면 나열된 런타임 템플릿의 이름을 클릭합니다.
    4. 노트북 툴바에서 커널 선택을 클릭하고 Python 환경…을 클릭한 후 로컬 Python 환경을 선택합니다.
  3. 로컬 환경에 필요한 Spark Connect 및 google-colabsqlviz Python 패키지를 설치하려면 노트북 셀 또는 로컬 터미널에서 다음 명령어를 실행합니다.

    노트북 셀

    %pip install -U 'google-cloud-spark-connect[interactive,client]'
    

    로컬 터미널

    pip install -U 'google-cloud-spark-connect[interactive,client]'
    

데이터 세트 로드 및 시각화

ManagedSparkSession를 시작하고 데이터 세트를 pyspark.sql.DataFrame에 로드한 후 DataFrame을 explore_dataframe 함수에 전달하여 대화형 시각화를 렌더링합니다. 다음 예시에서는 서버리스 세션에 연결하고 Lakehouse 공개 데이터 세트에서 Palmer Penguins 데이터 세트(`lakehouse-public-data`.ml_datasets.penguins)를 로드합니다.

# Importing managed_spark_connect automatically imports explore_dataframe
from google.cloud.managed_spark_connect import ManagedSparkSession

spark = (
    ManagedSparkSession.builder.projectId("PROJECT_ID")
    .location("REGION")
    .getOrCreate()
)

df = spark.read.table("`lakehouse-public-data`.ml_datasets.penguins")

explore_dataframe(df)

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • REGION: 세션의 Managed Service for Apache Spark 리전 (예: us-central1)

셀을 실행하면 google-colabsqlviz가 DataFrame 스키마를 검사하고 셀 출력 영역에 기본 시각화가 포함된 대화형 시각화 위젯을 렌더링합니다. penguins 데이터 세트의 경우 species로 그룹화된 평균 flipper_length_mm 및 body_mass_g의 분산형 차트를 렌더링합니다.

위젯 툴바에서 데이터를 클릭하여 페이지로 나눈 테이블에서 기본 DataFrame 행을 검사합니다. 분할 모드를 선택하여 차트와 기본 데이터 테이블을 함께 표시합니다. 차트를 클릭하여 차트 뷰로 돌아갑니다.

펭귄 종별 평균 지느러미 길이와 체질량을 보여주는 시각화 위젯의 기본 분산형 차트 뷰

차트 살펴보기 및 맞춤설정하기

위젯 인터페이스에서 차트 유형, 측정기준, 측정항목, 집계, 정렬, 필터를 맞춤설정하고 결과 데이터를 노트북의 DataFrame으로 다시 내보낼 수 있습니다.

  1. 차트 유형 선택: 구성 설정 패널에서 차트 유형 메뉴를 클릭하고 세로 막대 그래프와 같은 차트 유형을 선택합니다. 지원되는 차트 유형의 전체 목록은 데이터 스튜디오의 차트 유형을 참조하세요.
  2. 측정기준 및 측정항목 구성: 설정 탭에서 penguins DataFrame의 필드를 구성합니다.
    • 측정기준을 species로 설정하여 펭귄 종별로 레코드를 그룹화합니다.
    • 측정항목 - Y축에서 측정항목을 body_mass_g로 설정하고 집계를 AVG(평균)로 설정하여 각 종의 평균 체중(그램)을 계산합니다.
    • 측정기준 추가를 클릭하고 island 또는 sex를 선택하여 여러 측정기준에서 차트를 세분화하거나 측정항목 집계를 AVG에서 MAX 또는 SUM으로 변경합니다.
  3. 시각화 정렬 및 필터링:
    • 설정 탭의 정렬에서 AVG 집계가 있는 body_mass_g를 선택하고 내림차순을 선택하여 평균 체질량이 가장 높은 순으로 종의 순위를 매깁니다.
    • 위젯 툴바에서 필터 추가를 클릭하여 필드 값 (예: body_mass_g가 4000보다 크거나 같음)으로 레코드를 필터링하거나 위젯 하단에서 출력 데이터 프레임 만들기를 클릭하여 집계된 차트 데이터 또는 필터링된 데이터를 새 DataFrame 셀로 내보냅니다. 차트 속성 또는 필터를 업데이트하면 google-colabsqlviz가 DataFrame에 대해 쿼리를 다시 계산하고 시각화를 업데이트합니다.

펭귄 종별 평균 체질량을 내림차순으로 정렬하여 표시하는 시각화 위젯의 세로 막대 그래프 및 구성 패널

삽입된 차트 인터페이스에서 차트 속성, 집계, 대화형 컨트롤을 구성하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.

대규모 DataFrame 실행 구성

pyspark.sql.DataFrame를 explore_dataframe(df)에 전달하면 google-colabsqlviz는 DataFrame 크기에 따라 두 가지 실행 전략 중에서 선택합니다.

  • 인메모리 구체화 (작은 DataFrame의 기본값): DataFrame이 256 MiB 이하로 추정되고 최대 5,000,000개의 행을 포함하는 경우 google-colabsqlviz는 DataFrame을 커널 메모리에 한 번 수집합니다. 이후 차트 유형 변경, 집계, 정렬, 필터링은 지연 시간이 최소화된 메모리에서 실행되며 새 Spark 작업을 트리거하지 않습니다.
  • 분산 Spark 푸시다운 (더 큰 DataFrame의 기본값): DataFrame이 바이트 또는 행 예산을 초과하면 google-colabsqlviz는 DataFrame을 지연 상태로 유지하고 각 차트 쿼리, 필터, 정렬, 페이지 매김 요청을 Managed Service for Apache Spark 서버리스 세션에서 실행되는 PySpark 작업으로 변환합니다. 이 접근 방식은 지연 시간을 추가할 수 있지만 훨씬 더 큰 DataFrame을 시각화할 수 있습니다.

explore_dataframe(df)를 호출하기 전에 COLABSQLVIZ_PYSPARK_EAGER_MAX_BYTES 환경 변수를 설정하여 인메모리 구체화 기준점을 조정하거나 사용 중지할 수 있습니다.

import os

# Importing managed_spark_connect automatically imports explore_dataframe
from google.cloud.managed_spark_connect import ManagedSparkSession

# Set to "0" to disable upfront collection and push all chart queries to Spark,
# or set a custom byte limit, such as str(64 * 1024 * 1024) for 64 MiB.
os.environ["COLABSQLVIZ_PYSPARK_EAGER_MAX_BYTES"] = "0"

explore_dataframe(df)

다음 단계