首页 > 解决方案 > 替换数据框中的值保持原始值

问题描述

我有一个如下所示的数据框。

+------+----+----+
| col1 |col2|col3| 
+------+----+----+
|abc   | c  |h   |
|abc   | c  |h   |
|abc   | c  |h   |
+------+----+----+

对于 col2,我有一个值 c,如上图所示。

现在所有的 c 值都应该用 cat 替换,而 col3 的值 h 应该用 hat 替换。

我可以通过以下语句轻松实现这一点

dataframe.withColumn("col2", when(col("col2").equalTo("c"), "cat").otherwise(col("col2") )

但我也想拥有原始值。就像说我的最终数据框应该如下所示

+------+----+----+-----+----+
| col1 |col2|col3| col4|col5|
+------+----+----+-----+----+
|abc   | c  |cat |    h|hat |
|abc   | c  |cat |    h|hat |
|abc   | c  |cat |    h|hat |
+------+----+----+----+-----+

我怎样才能做到这一点???任何帮助.... :)

标签: scalaapache-sparkapache-spark-sql

解决方案


你只需要给一个新的列名

dataframe.withColumn("col4",
   when(col("col2").equalTo("c"), "cat").otherwise(col("col2") 
)
.withColumn("col5",
   when(col("col3").equalTo("c"), "cat").otherwise(col("col3") 
)

withColumncolumn使用您提供的名称创建一个新名称。如果名称已经存在,它只是替换旧列。

输出:

+------+----+----+-----+----+
| col1 |col2|col4| col3|col5|
+------+----+----+-----+----+
|abc   | c  |cat |    h|hat |
|abc   | c  |cat |    h|hat |
|abc   | c  |cat |    h|hat |
+------+----+----+----+-----+

如果您真的想保留前一列,则需要创建一个临时列并交换列名。

希望这可以帮助!


推荐阅读