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

PySpark创建DataFrame时出现NameError(row未定义)的问题排查与修复

问题原因

你报错的核心是**row变量未定义**:在创建df2的列表推导式里,你直接用了row[name]来取各列的最大长度,但这个row根本没被初始化过。因为你第一步生成的df是聚合后的单行DataFrame,存储了各列的最大长度,但你没有把这行数据从DataFrame里提取出来就直接想用,自然会触发NameError。

修复方案

先从聚合后的单行DataFrame里提取出实际的行数据,再用它来构建df2:

from pyspark.sql.functions import col, length, max
from pyspark.sql import Row

# 计算各列的最大长度,避免覆盖原df,改用新变量名
max_length_df = df.select([max(length(col(name))).alias(name) for name in df.schema.names])

# 提取单行数据到row变量中
row = max_length_df.first()

# 用提取到的row构建df2的Row列表
df2 = spark.createDataFrame(
    [Row(col=name, length=row[name]) for name in df.schema.names],
    ['col', 'length']
)
额外优化提示
  • 不要用df = df.select(...)这种覆盖原变量的写法,容易丢失原始数据,改用新变量名更安全。
  • 如果处理的是超大数据量,优先用first()提取单行数据,比转成Pandas DataFrame更高效,不会占用过多内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:15:23