У меня есть 2 RDD, каждый из которых представляет собой набор строк, содержащих дубликаты. Я хочу найти пересечение двух множеств сохранение дубликатов. Пример:Spark: Как эффективно иметь пересечения, сохраняющие дубликаты (в Scala)?
RDD1 : a, b, b, c, c, c, c
RDD2 : a, a, b, c, c
Пересечение Я хочу есть множество a, b, c, c
т.е. пересечение будет содержать каждый элемент минимальное количество раз, что он присутствует в обоих наборах.
По умолчанию intersection
трансформация не сохраняет дубликаты AFAIK. Есть ли способ для эффективно вычислить пересечение, используя некоторые другие преобразования и/или преобразование пересечения? Я стараюсь избегать этого алгоритмически, что вряд ли будет столь же эффективным, как это делает Spark. (Для заинтересованных, я пытаюсь вычислить Jaccard bag similarity для набора файлов).
Отлично - спасибо! Есть небольшая синтаксическая ошибка - отредактировано 'iter1' =>' buf1' и 'iter2 => buf2', чтобы заставить его работать. – TCSGrad
Кроме того, у меня есть запрос. Когда вы используете 'parallelize' явно vs, ожидаете, что Spark будет обрабатывать его внутренне через RDD? – TCSGrad
Вы правы - извините. Метод 'parallelize()' фактически загружает существующую коллекцию в RDD по сравнению с методом 'textFile()', который загружает файлы с диска в RDD. –