在其他2列的Spark Dataset中添加一列

时间:2017-11-24 06:48:37

标签: apache-spark apache-spark-sql

我在火花中有一个Dataset<Row>,就像:

+----+-------+
| age|   name|
+----+-------+
|  15|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

现在我要添加一个字符串值为age的字符串加上字符串值name的列,如:

+----+-------+-----------+
| age|   name|cbdkey     |
+----+-------+-----------+
|  15|Michael|  15Michael|
|  30|   Andy|  30Andy   |
|  19| Justin|  19Justin |
+----+-------+-----------+

我用:

df.withColumn("cbdkey",col("age").+(col("name"))).show()

但新列cbdkey的所有值均为null。那么,我该怎么做?提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用concat功能:

df.withColumn("cbdkey", concat(col("age"), col("name"))).show
+---+-------+---------+
|age|   name|   cbdkey|
+---+-------+---------+
| 15|Michael|15Michael|
| 30|   Andy|   30Andy|
| 19| Justin| 19Justin|
+---+-------+---------+

如果您需要指定自定义分隔符,请使用concat_ws

df.withColumn("cbdkey", concat_ws(",", col("age"), col("name"))).show
+---+-------+----------+
|age|   name|    cbdkey|
+---+-------+----------+
| 15|Michael|15,Michael|
| 30|   Andy|   30,Andy|
| 19| Justin| 19,Justin|
+---+-------+----------+

答案 1 :(得分:1)

其他方法是在数据帧

上编写一个UDF(用户定义函数)
val concatUDF = udf {
  (age: Int, name: String) => {
    age + name
  }
}

df.withColumn("cbdkey", concatUDF(col("age"), col("name"))).show()

输出:

+---+-------+---------+
|age|   name|   cbdkey|
+---+-------+---------+
| 15|Michael|15Michael|
| 30|   Andy|   30Andy|
| 19| Justin| 19Justin|
+---+-------+---------+