我需要为一些单元测试创建一个PySpark数据框架。dataframe中的一个列需要是TimestampType
类型。下面的代码可以定义dataframe:
spark = (SparkSession
.builder
.master("local[*]")
.appName("Unit-tests")
.getOrCreate())
data = [
("2023-04-25 00:00:00", "A", 100.5),
("2023-04-26 00:00:00", "A", 110.0),
("2023-04-28 00:00:00", "A", 105.0),
("2023-04-27 00:00:00", "B", 50.5),
("2023-04-29 00:00:00", "B", 55.5),
]
schema = StructType([
StructField("time", TimestampType(), True), \
StructField("id", StringType(), True), \
StructField("value", DoubleType(), True)
])
df = spark.createDataFrame(
data=data,
schema=schema
)
但是,这给了我一个TypeError:field time: TimestampType() can not accept object '2023-04-25 00:00:00' in type
。
我知道一种解决方法,首先将time
列定义为StringType
,然后通过添加以下代码将其转换为TimestampType
:df.withColumn("time", col("time").cast(TimestampType()))
但这似乎是一种相当麻烦的方法。如何在模式中直接定义它?
1条答案
按热度按时间jv4diomz1#
此错误是因为TimestampType需要
Timestamp
类型而不是str
。这可以通过在Python中使用datetime
来导出。你只需要像这样定义你的数据: