Databricks创建含时间戳字段的DataFrame显示null的原因
异常原因
出现null返回值的核心原因是用法错误:
F.current_timestamp()返回的是Spark的Column列表达式对象,这类对象的设计用途是在DataFrame转换算子(比如select、withColumn)中作为列计算逻辑使用,不能直接作为字面量数据传入spark.createDataFrame()的data参数。spark.createDataFrame()要求传入的data列表元素是和schema匹配的原生字面量值,传入未绑定执行上下文的Column表达式时,Spark无法将其解析为对应的Timestamp类型值,最终就会返回null结果。
正确实现方式
你可以选择以下任意一种写法实现获取当前时间戳的需求:
- 直接通过Spark SQL内置函数生成数据,不需要手动构造data和schema:
%python from pyspark.sql import functions as F df = spark.range(1).select(F.current_timestamp().alias("current_timestamp")) display(df)
- 如果要使用
createDataFrame接口,传入Python原生的时间类型字面量即可:
%python from pyspark.sql.types import StructType, StructField, TimestampType from datetime import datetime data = [datetime.now()] schema = StructType([StructField("current_timestamp", TimestampType(), True)]) df = spark.createDataFrame(data, schema) display(df)
内容的提问来源于stack exchange,提问作者bayerb
相关产品推荐
相关产品推荐

