我正在从xml中提取一些数据。我的整个工作流程(可能效率低下)是:
将xml读入Dataframe('df\u individual')
筛选不需要的列
生成目标架构(下面共享)
将Dataframe转换为rdd
使用第3步和第4步中的模式和rdd创建Dataframe
我创建了rdd,如下所示:
rddd = df_individual.rdd.map(tuple)
“dfèu individual”是读取xml的原始Dataframe。
模式如下:
schema = types.StructType([
types.StructField('applicaion_id', types.StringType()),
types.StructField('cd_type', types.StringType()),
types.StructField('cd_title', types.StringType()),
types.StructField('firstname', types.StringType()),
types.StructField('middlename', types.StringType()),
types.StructField('nm_surname', types.StringType()),
types.StructField('dt_dob', types.DateType()),
types.StructField('cd_gender', types.StringType()),
types.StructField('cd_citizenship', types.StringType())
])
它在上失败
df_result = spark.createDataFrame(rddd, schema)
错误是
TypeError: field dt_dob: DateType can not accept object '1973-02-19' in type <class 'str'>
创建“df\u result”数据框的主要目的是拥有一个预定义的模式,并隐式地强制转换rdd和数据框之间存在差异的所有列。这是我第一次与rdd合作,我找不到一个直接的铸造机制这样的情况。
如果你能帮助解决铸造错误或共享一个更好的工作流程,这将是伟大的。
谢谢
1条答案
按热度按时间axzmvihb1#
如果您的目标只是将数据转换为正确的模式,并将一些字符串列转换为日期列,那么我将使用
select
加上迄今为止。印刷品
与列一起
dt_bob
具有日期数据类型的。