2014-12-16 5 views
0

У меня стол X с key(a,b) и стол Y с key(a). Я искал несколько функций API в Spark, но не могу найти то, что может дать мне соединение обеих этих таблиц только key(a).Сложное внутреннее соединение в Spark или Pyspark

Есть две структуры данных (думать о них как две таблицы с двумя разными ключами)

X.take(1) -> made of key(a,b) 

[((u'"1"', u'"B8"'), (u'"1"', u'"B8"', array([[ 7.16677290e-01, 4.15236265e-01, 7.02316511e-02]])))] 

Y.take(1) -> have key(a) 

[(u'"5"', (u'"5"', array([[ 0.86596322, 0.29811589, 0.29083844, 0.51458565, 0.23767414]])))] 

Теперь, я хочу что-то вроде структуры a -> [a,b,array_1,array_2].

Cogroup не служил моей цели, так как он возвращает декартовую продукцию key(a,b) и key(a).

Любые предложения или намеки о том, как я могу получить структуру данных со строками, как:

a -> [a,b,array_1,array_2].

ответ

1

Есть ли причина, по которой вы должны держать ключ как (a,b) на протяжении всего соединения? Похоже, вы можете немного изменить структуру своего RDD, чтобы сделать работу соединения.

Просто измените ((a,b),[value]) на (a,(b,[value])), затем начните с (a,[value]). В итоге вы получите (a, Iterable((b,[value])), Iterable([value]).

+0

Я мог бы сменить ключи, но я не хочу этого делать. Он не ближе к [a, b, [value1], value2]. – ssvk3

+0

Да, это так. Вы можете сопоставить '(a, Iterable ((b, [значение])), Iterable ([значение])' to '(a, (a, b, [value1], [value2]))' довольно легко. – climbage

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