Как объединить два столбца набора данных в искре

У меня есть набор данных искры, подобный этому:

> df.show()
+------+------+
| No1  | No2  |
+------+------+
| 001  | null |
| 002  | 002  |
| 003  | 004  |
| null | 005  |
+------+------+

Я хочу получить новый столбец No3, содержащий значения из столбцов No1 и No2, условием является копирование No1 > если у него есть значение, иначе, если оно равно null, использовать значение из No2

+------+------+------+
| No1  | No2  | No3  |
+------+------+------+
| 001  | null | 001  |
| 002  | 002  | 002  |
| 003  | 004  | 003  |
| null | 005  | 005  |
+------+------+------+

Как я могу это сделать?


person freefrog    schedule 17.08.2018    source источник


Ответы (2)


Я думаю, что вы ищете объединение.

import org.apache.spark.sql.functions._

val data = spark.sparkContext.parallelize(Seq(
  ("001", null),
  ("002", "002"),
  ("003", "004"),
  (null, "005")
)).toDF("No1", "No2")

val resultDf = data.withColumn("No3", coalesce($"No1", $"No2"))

resultDf.show
person Constantine    schedule 17.08.2018

Вы можете проверить, является ли столбец No1 для null. Если это null, то возьмите значение из No2

import org.apache.spark.sql.functions._

val data = spark.sparkContext.parallelize(Seq(
  ("001", null),
  ("002", "002"),
  ("003", "004"),
  (null, "005")
)).toDF("No1", "No2")

val resultDf = data.withColumn("No3", when($"No1".isNull, $"No2").otherwise($"No1"))

resultDf.show

Выход:

+----+----+---+
|No1 |No2 |No3|
+----+----+---+
|001 |null|001|
|002 |002 |002|
|003 |004 |003|
|null|005 |005|
+----+----+---+

Надеюсь это поможет!

person koiralo    schedule 17.08.2018