Scala / Spark отбрасывает дубликаты, основанные на другом значении столбца - PullRequest
0 голосов
/ 03 октября 2018

Я хочу удалить дубликаты с тем же идентификатором, которые не имеют определенного значения, в другом столбце (в данном случае фильтровать по тем строкам, которые имеют одинаковый идентификатор и значение = 1). Ввод df:

+---+-----+------+
| id|value|sorted|
+---+-----+------+
|  3|    0|     2|
|  3|    1|     3|
|  4|    0|     6|
|  4|    1|     5|
|  5|    4|     6|
+---+-----+------+

РезультатЯ хочу:

+---+-----+------+
| id|value|sorted|
+---+-----+------+
|  3|    1|     3|
|  4|    1|     5|
|  5|    4|     6|
+---+-----+------+

1 Ответ

0 голосов
/ 03 октября 2018

Это можно сделать, получив строки, значения которых равны «1», а затем оставив соединение с данными оригинала:

val df = List(
  (3, 0, 2),
  (3, 1, 3),
  (4, 0, 6),
  (4, 1, 5),
  (5, 4, 6)
).toDF("id", "value", "sorted")

val withOne = df.filter($"value" === 1)
val joinedWithOriginal = df.alias("orig").join(withOne.alias("one"), Seq("id"), "left")
val result = joinedWithOriginal
  .where($"one.value".isNull || $"one.value" === $"orig.value")
  .select("orig.id", "orig.value", "orig.sorted")

result.show(false)

Вывод:

+---+-----+------+
|id |value|sorted|
+---+-----+------+
|3  |1    |3     |
|4  |1    |5     |
|5  |4    |6     |
+---+-----+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...