您可以使用 google-colabsqlviz Python 软件包和 Managed Service for Apache Spark,在 Jupyter 笔记本中以交互方式探索 PySpark DataFrame,包括 Google Cloud Data Agent Kit (DAK)。google-colabsqlviz 基于 anywidget 构建,由数据洞察图表引擎提供支持,可在笔记本单元格输出中呈现交互式可视化,而无需绘制代码。
将 DataFrame 传递给 google-colabsqlviz 时,您可以在图表和数据表视图之间切换、配置维度和指标、应用聚合、以交互方式对数据进行排序或过滤,以及将过滤或聚合的图表数据导出到新的 DataFrame:
- 多引擎 DataFrame 支持:使用一个 API 即可直观呈现
pyspark.sql.DataFrame(包括 Spark Connect DataFrame)、bigframes.pandas.DataFrame和pandas.DataFrame对象。 - 内核内和分布式执行:虽然该 widget 会从 Google 的 CDN 加载数据洞察图表界面,但您的底层数据不会发送到数据洞察。所有聚合和过滤操作都在 Python 内核或 Managed Service for Apache Spark 会话中运行,图表则在笔记本客户端中本地呈现。
- 零环境冲突:可选的分布式引擎(例如
pyspark和bigframes)会在运行时检测到,并且在您安装google-colabsqlviz时不会升级或覆盖。
准备工作
在无服务器运行时版本为 3.0 或更高版本的 Managed Service for Apache Spark 交互式会话中,支持通过 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,然后选择 + 新建 Spark 笔记本。
- 在选择内核类型部分,点击本地内核。
- 如需选择无服务器运行时模板,请点击列出的运行时模板的名称。
- 在笔记本工具栏中,点击选择内核,点击 Python 环境…,然后选择本地 Python 环境。
如需在本地环境中安装所需的 Spark Connect 和
google-colabsqlvizPython 软件包,请在笔记本单元或本地终端中运行以下命令:Notebook 单元
%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。
在 widget 工具栏中,点击数据,在分页表格中检查底层 DataFrame 行。选择拆分模式可同时查看图表和底层数据表。点击图表以返回图表视图。
探索和自定义图表
您可以在 widget 界面中自定义图表类型、维度、指标、聚合、排序和过滤条件,并将生成的数据导出回笔记本中的 DataFrame。
- 选择图表类型:在配置设置面板中,点击图表类型菜单,然后选择一种图表类型,例如垂直条形图。如需查看受支持图表类型的完整列表,请参阅数据洞察中的图表类型。
- 配置维度和指标:在设置标签页中,为
penguinsDataFrame 配置字段:- 将维度设置为
species,以便按企鹅物种对记录进行分组。 - 在指标 - Y 轴下,将指标设置为
body_mass_g,并将聚合设置为 AVG(平均值),以计算每个物种的平均体重(以克为单位)。 - 点击添加维度,然后选择
island或sex,以跨多个维度细分图表,或将指标汇总从 AVG 更改为 MAX 或 SUM。
- 将维度设置为
- 对可视化图表进行排序和过滤:
- 在设置标签页的排序下,选择
body_mass_g并采用 AVG 聚合,然后选择降序,按平均体重从高到低对物种进行排名。 - 点击微件工具栏中的添加过滤条件,按字段值(例如
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)