Удалить записи из mutable.mutableList в Scala - PullRequest
0 голосов
/ 11 мая 2019

У меня есть mutable.MutableList [emp] со следующей структурой.

case class emp(name: String,id:String,sal: Long,dept: String)

Я создаю записи на основе указанного выше класса case в приведенном ниже mutable.MutableList [emp].

val list1: mutable.MutableList[emp]  = ((mike, 1, 123, HR),(mike,2,123,sys),(Lind,1,2323,sys))

Если у меня одно и то же имя с идентификаторами 1 и 2, мне нужно взять только 2 и сбросить запись с идентификатором 1. Идентификатор id 2 отсутствует, я должен принять идентификатор 1.

Как этого добиться? Я попробовал это следующим образом, но результаты не точны:

0. converted mutable.mutableList to Dataframe
1. filtered records with id 1(id1s_DF)
2. filtered records with id 2(other_rec_DF)
3. joined records with name and used leftsemi as join condition.
val join_info_DF = other_rec_DF.join(id1s_DF, id1s_DF("name") =!= other_rec_DF("name"),"leftsemi")

Выше объединения даст все имена, которые присутствуют в other_rec_DS и отсутствуют в Other_rec_DF.

Похоже, я что-то не так делаю с объединением и не получаю ожидаемых результатов.

Могут ли некоторые помочь мне достичь этого в mutableList или путем преобразования его в Dataframe.

Спасибо, Баба

1 Ответ

3 голосов
/ 11 мая 2019

Если размер ваших данных достаточно мал, вам не нужно что-то вроде Apache Spark для выполнения вышеуказанной задачи.

Делая это в простом скалярном коде, код будет выглядеть примерно так:

case class Emp(name: String,id:Int,sal: Long,dept: String)

val list1: mutable.MutableList[Emp] = mutable.MutableList(
  Emp("mike", 1, 123, "HR"),
  Emp("mike", 2, 123, "sys"),
  Emp("Lind", 1, 2323, "sys")
)

val result = list1
  .groupBy(_.name)
  .mapValues(_.sortBy(_.id)(Ordering[Int].reverse).head)
  .values
result.foreach(println)

Вывод приведенного выше кода будет

Emp(Lind,1,2323,sys)
Emp(mike,2,123,sys)

Идея / подход состоит в том, чтобы убедиться, что мы группируем по ключу, по которому вы хотите дублировать элементы, сортируйте их ивыберите тот с самым высоким идентификатором.Затем мы опускаем ключ и сохраняем только значения.

Приведенный выше подход будет работать точно так же и на Spark.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...