替换数据框中保留原始值的值

时间:2018-05-16 12:56:11

标签: scala apache-spark apache-spark-sql

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

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

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

现在所有的c值都应该用cat和h代替,col3的值应该用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 |
+------+----+----+----+-----+

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

2 个答案:

答案 0 :(得分:1)

您只需要将新列名称设为

c1 <- c("a", "b", "c")
c2 <- c(1, 2, 3)
test <- cbind(c1, c2)

test1 <-  DT::datatable(test)
test2 <-  DT::datatable(test, options = list(order = list(1, 'desc')))

dataframe.withColumn("col4", when(col("col2").equalTo("c"), "cat").otherwise(col("col2") ) .withColumn("col5", when(col("col3").equalTo("c"), "cat").otherwise(col("col3") ) 使用您提供的名称创建新的withColumn。如果名称已存在,则只需替换旧列。

输出:

column

如果您确实要保留上一列,则需要创建临时列并交换列名。

希望这有帮助!

答案 1 :(得分:0)

如果我没有弄错,你需要在let url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=' + this.location.latitude + ',' + this.location.longitude + '&radius='+this.radius + '&type=park&key=' + this.placeApiKey; this.places = this.httpClient.get(url); this.places .pipe( pluck('results', 'geometry') ) .subscribe(data => { console.log(data); }); 声明中指定另一个列名:

withColumn

这样就可以保留旧列,并创建一个新列