我正在尝试从以下列表中创建一个dataframe:
data = [(1,'abc','2020-08-20 10:00:00', 'I'),
(1,'abc','2020-08-20 10:01:00', 'U'),
(1,'abc','2020-08-21 10:02:00', 'U'),
(2,'pqr','2020-08-20 10:00:00', 'I'),
(2,'pqr','2020-08-20 10:01:00', 'U'),
(2,'pqr','2020-08-21 10:02:00', 'D'),
(3,'rst','2020-08-20 10:00:00', 'I'),
(3,'rst','2020-08-20 10:01:00', 'U'),
(3,'rst','2020-08-21 10:02:00', 'U')]
字符串
我正在运行以下代码来创建一个dataframe:
from pyspark.sql.types import *
mySchema = StructType([StructField("key", IntegerType()),
StructField("name", StringType()),
StructField("ts", TimestampType()),
StructField("cdc_flag", StringType())])
df_raw = spark.createDataFrame(data, mySchema)
型
我得到以下错误:
TypeError: field ts: TimestampType can not accept object '2020-08-20 10:00:00' in type <class 'str'>
型
我也尝试将数据类型更改为DateType。但得到同样的错误。
请注意,我试图了解这种实现模式的方式是否可行。我想我可以使用withColumn并强制转换这个ts列,然后删除原来的列来处理这个问题。
1条答案
按热度按时间zf2sa74q1#
这个错误是合理的,因为
TimestampType
需要的是Timestamp
类型,而不是str
。这可以通过使用Scala中的java.sql.Timestamp
和Python中的datetime
来导出。你只需要像这样定义你的
data
:字符串