【发布时间】:2019-03-29 02:42:36
【问题描述】:
从数据框开始:
val someDF = Seq(
(8, "bat", "h"),
(64, "mouse", "t"),
(-27, "horse", "x")
).toDF("number", "thing", "letter")
someDF.show()
+------+-----+------+
|number|thing|letter|
+------+-----+------+
| 8| bat| h|
| 64|mouse| t|
| -27|horse| x|
+------+-----+------+
还有一个Map:
val lookup = Map(
"number" -> "id",
"thing" -> "animal"
)
我想选择并重命名列,使 number 变为 id、 thing 变成 animal 等等。
另一个 Stack Overflow 问题涉及重命名:Renaming column names of a DataFrame in Spark Scala,我确信有一种直接的方法可以在我没有看到的同时进行选择。
我认为沿着这些思路的东西会起作用,但是尽管输入是字符串并且它使用 Seq 而不是映射,但还是会出现很多类型不匹配:
val renamed_selected = someDF.select(
lookup.map(m => col(m._1).as(m._2))
):_*
所以想要的输出是:
+------+------+
|id |animal|
+------+------+
| 8| bat |
| 64|mouse |
| -27|horse |
+------+------+
谢谢?????????
关于重复问题标志的说明:问题Renaming column names of a DataFrame in Spark Scala 未涵盖如何同时重命名和选择列。
【问题讨论】:
-
关于重复问题标志的说明:问题stackoverflow.com/questions/35592917/…不包括如何同时重命名和选择列。
标签: scala apache-spark apache-spark-sql