我在RDBMS中有一個表,我把它放入一個資料框架(DF1)中:
1 employee_id
2 employee_name
3 salary
4 designation
我有一個資料框架(DF2),內容如下:
我有一個資料框架(DF2)。
_c0 _c1 _c2 _c3
101 monali 70000 developer
102 Amy 70000 developer
103 neha 65000 測驗員
我如何從DF1定義DF2的模式。我想讓DF2擁有上表中定義的模式。 預期輸出:
employee_id employee_name salary designation
101 monali 70000 developer
102 Amy 70000 developer
103 neha 65000 測驗員
我想使其引數化。
uj5u.com熱心網友回復:
你可以創建一個函式mapColumnNames,它需要兩個引數,包含列的資料框架(我稱之為columns資料框架)和你想改變列名的資料框架(我稱之為data資料框架)。
這個函式首先檢索columns資料框架中每一列的名稱和id,作為一個圖元的串列。然后它在這個圖元串列上進行迭代,在每次迭代中對data資料框架應用withColumnRenamed方法。
然后你可以呼叫這個函式mapColumnNames,將DF1作為columns資料框架,將DF2作為data資料框架。
下面是完整的代碼:
def mapColumnNames( columns: DataFrame, data: DataFrame)。) DataFrame = {
val columnNames = columns.collect().map(x => (x.getInt(0) - 1, x.getString(1) )
columnNames.foldLeft(data)((data, columnName) => {
data.withColumnRenamed(s"_c${columnName._1}"/span>, columnName._2)
})
}
val output = mapColumnNames(DF1, DF2)
uj5u.com熱心網友回復:
不清楚你的df1持有什么模式,所以使用了索引1的參考來獲取列
。val columns = df1.select($"1").collect()
否則,我們可以得到與第一個資料框架相關的所有列
val columns = df1.schema.fieldNames.map(col(_))
然后使用select,為我們的新資料框架獲取列
。val newDF = df2.select(columns :_*)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/309123.html
標籤:
