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

基于PySpark构建动态数据概况报告函数的需求

PySpark 数据概况报告生成函数

以下是一个动态生成数据概况报告的PySpark函数,包含基础统计、唯一值分析及可视化内容:

1. 函数实现

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, countDistinct, desc
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

def generate_data_profile_report(df, top_n_freq=3):
    # 1. 基础统计信息(基于summary扩展)
    basic_stats = df.summary().toPandas()
    
    # 2. 唯一值统计信息
    unique_stats = []
    for column in df.columns:
        # 计算基础指标
        col_counts = df.select(
            count(col(column)).alias("total_count"),
            countDistinct(col(column)).alias("distinct_count"),
            (countDistinct(col(column))/count(col(column))).alias("distinct_ratio")
        ).toPandas().iloc[0]
        
        # 计算Top N频繁值
        top_values = df.groupBy(column).count().orderBy(desc("count")).limit(top_n_freq).toPandas()
        top_values.columns = [f"{column}_value", "frequency"]
        
        # 整理当前列的唯一值统计
        col_stats = {
            "column": column,
            "total_count": col_counts["total_count"],
            "distinct_count": col_counts["distinct_count"],
            "distinct_ratio": round(col_counts["distinct_ratio"], 4),
            "top_frequent_values": top_values.to_dict("records")
        }
        unique_stats.append(col_stats)
    
    unique_stats_df = pd.DataFrame(unique_stats)
    
    # 3. 可视化生成
    plt.figure(figsize=(15, 8))
    
    # 子图1:各列唯一值数量柱状图
    plt.subplot(1, 2, 1)
    sns.barplot(x="column", y="distinct_count", data=unique_stats_df)
    plt.title("各列唯一值数量")
    plt.xticks(rotation=45)
    
    # 子图2:各列唯一值占比柱状图
    plt.subplot(1, 2, 2)
    sns.barplot(x="column", y="distinct_ratio", data=unique_stats_df)
    plt.title("各列唯一值占比")
    plt.xticks(rotation=45)
    
    plt.tight_layout()
    
    # 返回报告内容
    return {
        "basic_statistics": basic_stats,
        "unique_value_statistics": unique_stats_df,
        "visualization": plt
    }

2. 使用示例

# 初始化SparkSession
spark = SparkSession.builder.appName("DataProfileReport").getOrCreate()

# 创建示例DataFrame
data = [
    ("Alice", 25, "F", "New York"),
    ("Bob", 30, "M", "London"),
    ("Alice", 25, "F", "New York"),
    ("Charlie", 35, "M", "Paris"),
    ("Bob", 30, "M", "London")
]
df = spark.createDataFrame(data, ["name", "age", "gender", "city"])

# 生成报告
report = generate_data_profile_report(df)

# 打印基础统计
print("=== 基础统计信息 ===")
print(report["basic_statistics"])

# 打印唯一值统计
print("\n=== 唯一值统计信息 ===")
print(report["unique_value_statistics"])

# 展示可视化图表
report["visualization"].show()

函数说明

  • 基础统计:基于PySpark的summary()函数,包含计数、均值、标准差、最小值、分位数及最大值
  • 唯一值统计:对每列计算总条数、唯一值数量、唯一值占比,以及指定数量的高频值
  • 可视化:生成两个柱状图,分别展示各列的唯一值数量和占比,帮助快速识别高基数/低基数列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:30:04