【发布时间】:2021-11-26 03:16:01
【问题描述】:
我有一个 map 函数,我想将它应用于 dataframe 中的特定列。假设我有一个数据框 ABC,如下所示:
| A | B |
|---|---|
| foo | 1 |
| bar | 4 |
| biz | 3 |
我想将B列的所有元素乘以2,同时保留A列得到如下输出:
| A | B |
|---|---|
| foo | 2 |
| bar | 8 |
| biz | 6 |
我知道如何选择数据框中的 B 列并使用 map 转换元素,如下面的代码所示:
ABC.select("B").columns.map(c => c*2)
但我的问题是我也无法获得 A 列。
我第一次尝试使用这样的东西:
ABC.select("A", (ABC.select("B").columns.map(c => c*2):_*)
但是,这会引发“select”方法无法重载的错误——这是公平的,因为它不接受 Array[Column] 类型的参数。然后我尝试了这个:
val arrayB = Array("B")
ABC.select(ABC.columns.map(c => if (arrayB.contains(c)) c*2 else col(c)):_*)
这确实有效并将结果返回给我,但我想知道是否有更好的方法来做到这一点。提前致谢!
【问题讨论】:
标签: scala dataframe select apache-spark-sql transformation