我有一个Spark Dataframe (df1)具有特定模式,并且我有另一个具有相同列但不同模式的dataframe。我知道如何逐列执行,但由于我有一个大型列集,因此它将非常冗长。为了保持跨dataframe的模式一致性,我想知道我是否可以将一个模式应用于数据框或创建一个函数来完成这项工作。
df1
root
|-- A: date (nullable = true)
|-- B: integer (nullable = true)
|-- C: string (nullable = true)
df2
root
|-- A: string (nullable = true)
|-- B: string (nullable = true)
|-- C: string (nullable = true)`
我想复制应用模式的df1到df2。我会很感激任何commnets和方向。
我在一个专栏中尝试了这种方法,因为我有大量的专栏,这将是一种相当冗长的方法。
df2 = df2.withColumn("B", df2["B"].cast('int'))
2条答案
按热度按时间5fjcxozz1#
是的,可以动态使用**
dataframe.schema.fields
**df2.select(*[(col(x.name).cast(x.dataType)) for x in df1.schema.fields])
Example:
在这个例子中,我用
Integer,date,long types
定义了df1。**
df2
**定义为string
类型。**
df3
**是以df2
为源数据,附带df1 schema
定义的。xqkwcwgp2#
试试这个
输入数据框
或者,你创建一个方法,你需要一个更通用的解决方案-
并使用此方法将df 1的模式强加到df 2上-