You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS EMR的Jupyter Notebook中用PySpark生成折线图遇问题求助

解决AWS EMR Jupyter Notebook中PySpark DataFrame可视化问题

问题1:Pandas plot.line仅返回对象不显示图表

把Spark DataFrame转成Pandas DataFrame后,调用plot.line()只返回<AxesSubplot:xlabel='k'>是因为未触发图表渲染。Pandas绘图方法默认仅创建绘图对象,需显式调用渲染指令或确保inline模式生效。

正确操作步骤:

  1. 提前开启inline渲染模式(建议放在Notebook最顶部执行)
  2. 将Spark DataFrame转为Pandas DataFrame(数据量大时先采样,避免内存溢出)
  3. 调用绘图方法后显式触发渲染

示例代码:

# 开启inline渲染模式
%matplotlib inline

# 导入依赖库
import matplotlib.pyplot as plt
import pandas as pd

# 转换Spark DataFrame为Pandas DataFrame(数据量大时用采样:clusters_df.sample(0.1).toPandas())
pandas_df = clusters_df.toPandas()

# 绘制折线图
pandas_df.plot.line(x='k', y='score')
# 显式触发图表渲染
plt.show()

问题2:%matplotlib inline后出现NameError: clusters_df未定义

该错误是因为**%matplotlib inline执行后Jupyter内核环境重置,导致之前定义的clusters_df变量丢失**。

解决方法:

  • 将%matplotlib inline放在Notebook的第一个单元格执行,确保后续所有代码在同一环境运行
  • 若已在中间执行了魔法命令,重新运行定义clusters_df的单元格,或调整代码顺序,让clusters_df的定义在魔法命令之后

修正后代码顺序示例:

# 第一个单元格:开启inline模式
%matplotlib inline

# 第二个单元格:导入库+读取数据
from pyspark.sql import SparkSession
import matplotlib.pyplot as plt
import pandas as pd

# 初始化SparkSession(未初始化时执行)
spark = SparkSession.builder.appName("ClusterVisualization").getOrCreate()

# 读取数据到clusters_df(替换为你的实际读取逻辑)
clusters_df = spark.read.csv("s3://your-bucket/path/to/data.csv", header=True, inferSchema=True)

# 第三个单元格:转换并绘图
pandas_df = clusters_df.toPandas()
pandas_df.plot.line(x='k', y='score')
plt.show()

额外注意事项

  • 若clusters_df数据量较大,直接调用toPandas()会将全量数据加载到Driver节点内存,易引发内存溢出,建议先采样:clusters_df.sample(fraction=0.2, seed=42).toPandas(),可根据数据规模调整采样比例
  • 确保EMR的Jupyter Hub环境已安装matplotlib和pandas,未安装可在Notebook中执行!pip install matplotlib pandas安装

内容的提问来源于stack exchange,提问作者user3476463

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:33:46