Вычисление разности множеств двух СДР массива [Int] - PullRequest
0 голосов
/ 31 марта 2020

У меня есть два RDD, скажем, A и B, типа RDD[Array[Int]], и я хочу вычислить разницу между A - B и B - A. Я попробовал следующий код

val R1 = A.subtract(B)
val R2 = B.subtract(A)

, но он не возвращает правильный ответ. В предыдущем ответе упоминается, что « Выполнение операций над множествами, таких как вычитание с изменяемыми типами (в этом примере массивом), обычно не поддерживается или, по крайней мере, не рекомендуется ». Поэтому я должен изменить код на

val A1 = A.map(_.to[ArrayBuffer]).persist()
val B1 = B.map(_.to[ArrayBuffer]).persist()
val R1 = A1.subtract(B1)
val R2 = B1.subtract(A1)

Теперь он возвращает правильный ответ. Я хочу знать , есть ли более эффективный способ сделать это .

1 Ответ

1 голос
/ 31 марта 2020

Связанный ответ вводит в заблуждение. Проблема не в изменчивости. Arraybuffer, которая решила проблему, также является изменчивой.

subtract внутренне сравнивает элементы, используя equals и equals метод массивов java не работает (по умолчанию он равен ссылочному равенству).

A1.map(_.toSeq).subtract(A2.map(_.toSeq)) будет работать.

.toSeq упаковывает массивы java в scala WrappedArray, что имеет менее удивительную реализацию равенства.

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