向PySpark DataFrame插入datetime对象时触发TypeError报错求助
问题解决:PySpark插入datetime对象报错TypeError
错误原因
spark.createDataFrame()的第一个参数需要是可迭代的行数据集合(比如列表包裹的元组/Row对象),你直接传入单个datetime对象,PySpark无法将其解析为符合StructType的行结构,因此抛出类型错误。
解决方案
方法1:将datetime包装为元组列表
修改创建DataFrame的代码,把单个datetime对象放到包含元组的列表中:
# 正确写法 sdf = spark.createDataFrame([(date_time,)], schema=recorder_files)
这里[(date_time,)]代表一行数据,元组里的元素对应schema中定义的date_time字段。
方法2:使用PySpark Row对象
先导入Row类,构造行对象后再创建DataFrame:
from pyspark.sql import Row # 构造行对象 row = Row(date_time=date_time) # 生成DataFrame sdf = spark.createDataFrame([row], schema=recorder_files)
关于lit函数的说明
你之前尝试的lit()函数是用于在DataFrame的列操作中生成常量列的(比如df.withColumn("new_col", lit(date_time))),并不适用于构造DataFrame的初始输入数据,所以无法解决这个问题。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

