PySpark创建单列DataFrame报错:对象长度与字段长度不匹配
问题排查与修复
错误原因
你遇到的报错翻译为:对象长度(3)与字段长度(1)不匹配
问题出在data的元素定义上:(["James","Jon","Jane"])这种写法在Python中会被解析成普通数组,而非单元素元组。Spark会把这个数组当成包含3个元素的行数据,但你的schema仅定义了1个字段,因此触发长度不匹配的错误。
修复代码
只需给每个数据元素添加逗号,明确将其定义为单元素元组:
from pyspark.sql import functions as F from pyspark.sql.types import IntegerType, ArrayType, StructType, StructField, StringType # 每个元素末尾添加逗号,明确为单元素元组 data = [ (["James","Jon","Jane"],), (["Miken","Mik","Mike"],), (["John","Johns"],)] cols = StructType([ StructField("Name",ArrayType(StringType()),True) ]) df = spark.createDataFrame(data=data,schema=cols) df.printSchema() df.show()
验证结果
执行后会输出符合预期的结果:
root |-- Name: array (nullable = true) | |-- element: string (containsNull = true) +--------------------+ | Name| +--------------------+ |[James, Jon, Jane] | |[Miken, Mik, Mike] | | [John, Johns]| +--------------------+
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

