2014-04-21 10 views

Odpowiedz

3

Tak, istnieje. Spójrz na DStream APIs i zapewnili lewe i prawe połączenia zewnętrzne.

Jeśli masz strumień typu powiedzmy „Record”, a chcesz połączyć dwa strumienie zapisów, to można to zrobić tak:

var res: DStream[(Long, (Record, Option[Record]))] = left.leftOuterJoin(right) 

Ponieważ API powiedzieć, lewy i odpowiednie strumienie muszą być podzielone na hasz. tzn. możesz pobrać atrybuty z rekordu (lub mogą być w jakikolwiek inny sposób), aby obliczyć wartość skrótu i ​​przekształcić go w parowanie strumienia DStream. left i right strumienie będą typu DStream[(Long, Record)] przed wywołaniem tej funkcji łączenia. (Jest to tylko przykład: Typ skrótu może być innego rodzaju niż Long).

+0

dzięki ... to będzie pomocne, jeśli możesz podać przykład kodu ... – user3279189

5

Jest to tak proste, jak rdd1.leftOuterJoin(rdd2) ale trzeba się upewnić, oba RDD są w formie (klucz, wartość) dla każdego elementu the rdd's.

0

Spark SQL/Dane Rama API obsługuje również lewo/prawo/PEŁEN zewnętrzna łączy bezpośrednio:

https://spark.apache.org/docs/latest/sql-programming-guide.html

Z powodu tego błędu: https://issues.apache.org/jira/browse/SPARK-11111 zewnętrzna łączy w Spark przed 1.6 może być bardzo powolne (chyba że masz naprawdę małe zestawy danych do przyłączenia się). Kiedyś używał produktu kartezjańskiego, a następnie filtrował przed 1.6. Teraz używa zamiast tego SortMergeJoin.

Powiązane problemy