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

PySpark添加数组列表到DataFrame报错求助:StructType无法接受字符串对象

PySpark创建DataFrame报错解决:StructType无法接受字符串对象

问题场景

作为PySpark新手,尝试将mssparkutils.fs.ls(WORK_FOLDER)获取并处理后的文件列表(数组形式)存入DataFrame时,触发错误:

TypeError: StructType can not accept object '20230205' in type <class 'str'>

相关代码

# Validation Id Checking
columns = StructType([StructField('Name',StringType())])
FileList = []
files = mssparkutils.fs.ls(WORK_FOLDER)
for file in files:
    if file.name.endswith('csv'):
            fileName = file.name
            array = fileName.split("_")
            for word in array:
                index = word.find('Exchange')
                if index != 0:
                    FileList.append(str(word))
print(FileList)
df = spark.createDataFrame(data=FileList,schema=columns)

FileList输出结果

['20230205', '001040.csv', '20230205', '200005.csv', '20230206', '200006.csv', '20230207', '200021.csv', '20230208', '200007.csv', '20230209', '200010.csv', '20230210', '200009.csv']

报错原因

Spark的createDataFrame方法在传入StructType类型的schema时,要求输入数据必须是行对象、字典列表或元组列表(每个元素对应一行的字段值)。直接传入字符串数组时,Spark会把每个字符串当作整行数据,但schema定义的是一个名为Name的单字段结构,两者不匹配,因此触发类型错误。

解决方案

提供两种可行修改方式:

方式一:转换数据格式适配StructType schema

将字符串数组转换成元组列表,每个元组包含单个元素(对应Name字段的值),修改创建DataFrame的代码:

df = spark.createDataFrame(data=[(item,) for item in FileList], schema=columns)

方式二:简化schema定义

如果只需要单一字符串列,可以直接用字符串列表定义schema,同时转换数据格式:

# 替换原schema定义
columns = ["Name"]
# 创建DataFrame
df = spark.createDataFrame(data=[(item,) for item in FileList], schema=columns)

或者更简洁的写法,直接指定列名:

df = spark.createDataFrame(FileList, StringType()).toDF("Name")

验证效果

修改后运行代码,即可生成包含Name列的DataFrame,FileList中的每个字符串会对应DataFrame的一行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:07:23