想象一下,我有兩個具有相似模式的不同資料框:
df0.printSchema
root
|-- single: integer (nullable = false)
|-- double: integer (nullable = false)
和:
df1.printSchema
root
|-- newColumn: integer (nullable = false)
|-- single: integer (nullable = false)
|-- double: double (nullable = false)
現在我像下面這樣合并這兩個模式,并使用這個合并的模式創建一個新的資料框:
val consolidatedSchema = df0.schema. :(df1.schema).toSet
val uniqueConsolidatedSchemas = StructType(consolidatedSchema.toSeq)
val emptyDF = spark.createDataFrame(spark.sparkContext.emptyRDD[Row], uniqueConsolidatedSchemas)
emptyDF.printSchema
root
|-- newColumn: integer (nullable = false)
|-- single: integer (nullable = false)
|-- double: integer (nullable = false)
|-- double: double (nullable = false)
但是如您所見,我有兩個名稱為 的欄位double,但具有不同的資料型別。
如何保留其資料型別與df0架構中的資料型別匹配的資料型別并洗掉另一個資料型別?
我希望最終的架構是這樣的:
finalDF.printSchema
root
|-- newColumn: integer (nullable = false)
|-- single: integer (nullable = false)
|-- double: integer (nullable = false)
如果您建議任何其他方法來合并這兩個模式并達到我的目標,我真的很感激。
先感謝您。
uj5u.com熱心網友回復:
在連接串列之前,您可以過濾第二個架構以排除第一個架構中已經存在的欄位:
val uniqueConsolidatedSchemas = StructType(
df0.schema df1.schema.filter(c1 =>
!df0.schema.exists(c0 => c0.name == c1.name)
)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393181.html
標籤:数据框 斯卡拉 阿帕奇火花 apache-spark-sql
上一篇:scala通用函式參考
