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

PySpark构造包含数组字段的DataFrame格式与预期不符如何修正

问题排查与解决方法

错误原因

  • 数据维度错误:你定义的array_str1、array_str2、names每个元素都额外多套了一层列表,比如[["Size", "Color"]],导致数组字段多了一层嵌套,才会出现[[Size, Color]]的双层数组结构。
  • 行列顺序颠倒:spark.createDataFrame传入的第一个参数是行的集合,你现在把三个整列的数据当作三行传入,导致每一行都对应了一整列的内容,和预期结构完全不符。
  • Schema字段顺序和预期不符:你期望输出的第一列是str1,但你定义的Schema里前两个字段是数组类型,最后一个才是str1,顺序对应错误。

修正后的代码

from pyspark.sql.types import StructType, StructField, ArrayType, StringType

# 调整Schema字段顺序,和预期输出的字段顺序、字段名一致
schema = StructType([
    StructField("str1", StringType(), False),
    StructField("array_of_str1", ArrayType(StringType()), False),
    StructField("array_of_str2", ArrayType(StringType()), False)
]) 

# 去掉每个元素外层多余的列表括号,避免两层嵌套
array_str1 = ["Size", "Color"], ["Size", "Color"], ["Size", "Color"] 
array_str2 = ["M", "Black"], ["L", "White"], ["M", "Red"] 
names = "John", "Tom", "Matteo"

# 按行构造数据,每一行对应三个字段的取值
row_data = list(zip(names, array_str1, array_str2))

df = spark.createDataFrame(row_data, schema) 
df.show(10,False)

运行输出

运行上述代码后即可得到你预期的结果:

+------+-------------+-------------+
|str1  |array_of_str1|array_of_str2|
+------+-------------+-------------+
|John  |[Size, Color]|[M, Black]   |
|Tom   |[Size, Color]|[L, White]   |
|Matteo|[Size, Color]|[M, Red]     |
+------+-------------+-------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:09:05