您可以在 Jupyter 筆記本 (包括 Google Cloud Data Agent Kit (DAK)) 中,使用 google-colabsqlviz Python 套件搭配 Managed Service for Apache Spark,以互動方式探索 PySpark DataFrame。google-colabsqlviz 是以 anywidget 為基礎建構而成,並採用數據分析圖表引擎,可在筆記本儲存格輸出內容中,呈現互動式圖表,不需繪製程式碼。
將 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 工作階段中執行,圖表則會在本機的 Notebook 用戶端中算繪。
- 零環境衝突:系統會在執行階段偵測
pyspark和bigframes等選用分散式引擎,且不會在您安裝google-colabsqlviz時升級或覆寫這些引擎。
事前準備
在 Managed Service for Apache Spark 互動式工作階段中,如果無伺服器執行階段版本為 3.0 以上,則支援透過 Spark Connect 使用 google-colabsqlviz 轉譯 PySpark DataFrame。
請按照下列操作說明,在 Visual Studio Code (VS Code) 中使用 Data Agent Kit 建立筆記本,或使用其他支援的 Jupyter 筆記本環境,例如 JupyterLab:
- 設定 Data Agent Kit (DAK):
- 建立筆記本:
- 在 VS Code 活動列中,按一下「Data Agent Kit」,展開「Apache Spark」,然後選取「+ New Spark Notebook」。
- 在「選取核心類型」部分,點選「本機核心」。
- 如要選取無伺服器執行階段範本,請按一下列出的執行階段範本名稱。
- 在筆記本工具列中,依序點選「Select Kernel」和「Python Environments...」,然後選擇本機 Python 環境。
如要在本機環境安裝必要的 Spark Connect 和
google-colabsqlvizPython 套件,請在筆記本儲存格或本機終端機執行下列指令:筆記本儲存格
%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。
在小工具工具列中,按一下「Data」(資料),即可在分頁表格中檢查基礎 DataFrame 資料列。選取「分割模式」,即可同時查看圖表和基礎資料表。按一下「圖表」,返回圖表檢視畫面。
探索及自訂圖表
您可以在小工具介面中自訂圖表類型、維度、指標、匯總、排序和篩選器,並將產生的資料匯出回筆記本中的 DataFrame。
- 選取圖表類型:在設定面板中,按一下圖表類型選單,然後選取圖表類型,例如「Vertical bar chart」(垂直長條圖)。如需支援圖表類型的完整清單,請參閱「數據分析中的圖表類型」。
- 設定維度和指標:在「設定」分頁中,設定
penguinsDataFrame 的欄位:- 將「維度」設為
species,依企鵝種類將記錄分組。 - 在「Metric - Y axis」(指標 - Y 軸) 下方,將指標設為
body_mass_g,並將匯總設為「AVG」(平均值) (),計算每個物種的平均體重 (以公克為單位)。 - 按一下「Add dimension」(新增維度),然後選取「
island」或「sex」,依多個維度細分圖表,或將指標匯總方式從「AVG」(平均值) 變更為「MAX」(最大值) 或「SUM」(總和)。
- 將「維度」設為
- 排序及篩選圖表:
- 在「設定」分頁的「排序」下方,選取
body_mass_g並套用「AVG」匯總,然後選取「遞減」,依平均體重由高到低排列物種。 - 在小工具工具列中,按一下「Add filter」(新增篩選器),即可依欄位值篩選記錄 (例如
body_mass_g大於或等於4000),或按一下小工具底部的「Create output dataframe」(建立輸出資料框架),將匯總的圖表資料或篩選後的資料匯出至新的 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)