0

Можно ли соединить два (Pair)RDD с (или Dataset S/DataFrame S) (по нескольким полям), используя некоторые «пользовательские критерии»/нечеткого соответствия, например, диапазон/интервал для чисел или дат и различные «дистанционные методы», например. Левенштейн, для струн?Apache Спарк: Крепежный РДУ (наборы данных) с использованием пользовательских критериев/нечеткое соответствие

Для «группировки» в пределах RDD чтобы получить PairRDD, можно реализовать PairFunction, но мне кажется, что-то подобное не представляется возможным, когда объединяющем два RDD S/наборы данных? Я имею в виду что-то вроде:

rdd1.join(rdd2, myCustomJoinFunction); 

Я думал о реализации пользовательской логики в hashCode() и equals(), но я не уверен, как сделать «аналогичные» данные ветра в том же ведре. Я также изучал RDD.cogroup(), но не понял, как я мог бы использовать его для реализации этого.

Я только что наткнулся на elasticsearc-hadoop. Кто-нибудь знает, можно ли использовать эту библиотеку, чтобы сделать что-то вроде этого?

Я использую Apache Spark 2.0.0. Я реализую Java, но ответ в Scala также будет очень полезен.

PS. Это мой первый вопрос о Stackoverflow, так что несите меня, если я совершил ошибку новичков :).

+0

Я видел [Альтернативы RDD.cartesian для нечеткого присоединиться к ApacheSpark] (http://stackoverflow.com/questions/33376727/alternatives-to-rdd-cartesian-for-fuzzy-join-in-apachespark), но оба моих RDD/набора данных будут слишком большими для 'collect()' в памяти. –

ответ

0

Для DataFrames/Datasets вы можете использовать соединение с пользовательской функцией соединения. Создайте UDF, который будет использовать столбцы из DataFrame, как в этом вопросе in first answer.

Вы также можете сделать

rdd1.cartesian(rdd2).filter (...) 

Помните, что он будет потреблять много времени, чтобы вычислить

+0

Спасибо! Для моего прототипа я использую первый ответ из [пользовательского соединения с не равными ключами] (http://stackoverflow.com/questions/30132533/custom-join-with-non-equal-keys). –

Смежные вопросы