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

PySpark DataFrame重构与导出:Pivot操作失效求助

问题描述

我的DataFrame结构如下:

Attribute    Values   ID    Brand    Model
--------------------------------------------
Colour       Red      1     Sony     xyz
Energy       F        2     Samsung  abc
Year         2020     1     Sony     xyz
Energy       C        1     Sony     xyz
Colour       Blue     2     Samsung  abc

需要将其重构为如下结构:

Brand    Model    Colour    Energy     Year
--------------------------------------------
Sony     xyz      Red        C         2020
Samsung  abc      Blue       F         2021
etc...

我尝试按ID分组并执行Pivot操作,但代码无法正常运行,当前代码如下:

import pandas as pd
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType,StructField, StringType, IntegerType,BooleanType,DoubleType
import pyspark

spark = SparkSession.builder \
    .master("local[1]") \
    .appName("PySpark Read JSON") \
    .getOrCreate()

df = spark.read.json("examplell.json")

df.printSchema()
df.show()

count = df.select('ID').distinct().count()

df_pivot = df.groupBy('ID').pivot('Attribute').agg('Values')
df_pivot.printSchema()
df_pivot.show()
正确实现方案

问题出在两个核心点:一是分组仅使用ID,但最终结果需要保留Brand和Model,需将这两列加入分组;二是agg方法必须指定具体聚合函数,不能直接传入列名。

修改后的完整代码:

import pyspark.sql.functions as F
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master("local[1]") \
    .appName("PySpark Pivot Example") \
    .getOrCreate()

# 读取JSON数据(确保文件路径和结构正确)
df = spark.read.json("examplell.json")

# 分组+Pivot+聚合逻辑
df_pivot = df.groupBy('ID', 'Brand', 'Model') \
             .pivot('Attribute') \
             .agg(F.first('Values'))

# 展示转换后的结果
df_pivot.show()

关键细节说明

  • 分组列选择:Brand和Model与ID一一对应,加入groupBy后可确保最终结果保留这两列,符合目标结构要求。
  • 聚合函数选择:这里使用first是因为每个ID+Attribute组合仅对应一个有效值;若存在重复数据,可根据业务需求替换为max、min等其他聚合函数。
  • 缺失值填充:若部分分组缺少某些Attribute,结果会显示null,可通过fillna补充默认值,示例:
    # 为Year列填充默认值2021
    df_pivot = df_pivot.fillna({'Year': '2021'})
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:57:40