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

如何无需转换为Pandas,直接为PySpark DataFrame绘制直方图?

PySpark DataFrame直接绘制直方图的实现方案

当然有无需转换为Pandas DataFrame即可直接基于PySpark DataFrame绘制直方图的方法,常用方案如下:

  • 方案1:利用Notebook环境内置可视化能力
    如果你在Databricks Notebook、AWS Glue Notebook或者搭载了PySpark内核的Jupyter Notebook中操作,多数环境原生支持PySpark DataFrame的可视化接口,无需拉取全量数据转Pandas,示例代码如下:
    # 绘制原始数据的confirmed字段直方图,方法自动完成分箱计数
    df.select("confirmed").plot.hist(bins=2, title="确诊状态分布直方图")
    
    # 针对你已经完成的分组聚合结果,可以直接绘制分组对比直方图
    agg_df = df.groupBy('DAY_OF_WEEK','confirmed').agg(F.count('confirmed').alias('count')).sort('DAY_OF_WEEK')
    agg_df.plot.bar(x="DAY_OF_WEEK", y="count", color="confirmed")
    
  • 方案2:使用pyspark_dist_explore专用可视化库
    该库是专门为PySpark设计的可视化工具,所有聚合统计逻辑都在Spark集群侧完成,仅拉取最终的统计结果到本地绘图,不会传输全量原始数据:
    from pyspark_dist_explore import hist
    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    # 传入PySpark DataFrame即可直接绘制
    hist(ax, df.select('confirmed'), bins = 2, color=['#1f77b4'])
    plt.title('确诊状态分布直方图')
    plt.xlabel('Confirmed状态')
    plt.ylabel('样本数量')
    plt.show()
    
  • 方案3:手动完成Spark侧统计后绘图(无额外依赖)
    如果不想引入第三方库,可以先通过PySpark完成直方图所需的分箱、计数逻辑,仅拉取最终的统计结果(数据量仅和分箱数量一致,极小)到本地绘图,本质上也属于直接基于PySpark处理的方案:
    import matplotlib.pyplot as plt
    import pyspark.sql.functions as F
    
    # 连续值字段可以用F.width_bucket自定义分箱规则,离散值直接分组即可
    hist_stat = df.groupBy('confirmed').count().orderBy('confirmed').collect()
    
    # 仅拉取统计结果绘图,不涉及全量原始数据传输
    values = [row['confirmed'] for row in hist_stat]
    counts = [row['count'] for row in hist_stat]
    plt.bar(values, counts, width=0.5)
    plt.xticks(values)
    plt.title('确诊状态分布直方图')
    plt.show()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:39:03