給定一個帶有列"id", "first", "last", "year"
val df=sc.parallelize(Seq(
(1, "John", "Doe", 1986) 。
(2, "Ive", "Fish", 1990),
(4, "John", "Wayne", 1995)
)).toDF("id", "first", "last", "year")
和案例類
case class IdAndLastName(
id: Int,
Last:String )。
我想只選擇case類中的id和last列。換句話說,我想通過使用case類來獲得這個輸出df.select("id", "last")。我正在避免硬編碼的屬性。你能幫助我如何以一種緊湊的方式實作這個目標嗎?
uj5u.com熱心網友回復:
你可以為案例類創建一個明確的編碼器(通常這發生在隱含的這里)。然后,你可以從編碼器中獲得欄位名,并在選擇陳述句中使用它們:
val fieldnames = Encoders.product[IdAndLastName] .schema.fieldNames
df.select(fieldnames.head, fieldnames.tail:_*).show()
輸出:
-- -----
| id| last|
--- -----
| 1| Doe|
| 2| Fish|
| 4|Wayne|
--- -----
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309117.html
標籤:
