Size: a a a

2020 November 13

S

Serg Slipushenko in Data Engineers
Проблема только в том, то он не работает как обещает Г 😞
Я смотрю на kfserving, но кажется это шило на мыло
источник

AZ

Anton Zadorozhniy in Data Engineers
Иван Калининский
Во-первых, их три, во-вторых это строка из второго датасета, которая нашла себе пару только в одном случае
я в примере насчитал две такие строки, и почему A1 не нашла себе пару?
источник

A

Aleksandr in Data Engineers
Anton Zadorozhniy
я в примере насчитал две такие строки, и почему A1 не нашла себе пару?
| A1|  B1|  C1|  D1|
| A1|null|null|  D1|
| A1|null|null|  D1|
источник

AZ

Anton Zadorozhniy in Data Engineers
Aleksandr
| A1|  B1|  C1|  D1|
| A1|null|null|  D1|
| A1|null|null|  D1|
две строки
| A1|null|null|  D1|
и одна строка
| A1|  B1|  C1|  D1|
источник

AZ

Anton Zadorozhniy in Data Engineers
всего три строки)
источник

ИК

Иван Калининский... in Data Engineers
Aleksandr
Всем привет. Есть два датасета, например:
A    B   C 
A1  B1   C1
A2  B2   C2
A3  B3   C3

A  D
A1 D1
A4 D4

я делаю по ним full outer join спарком по колонке "A":
first.join(second, Seq("A"), "full_outer")
Результат, очевидно, получаю вот такой:
+---+----+----+----+
|  A|   B|   C|   D|
+---+----+----+----+
| A1|  B1|  C1|  D1|
| A2|  B2|  C2|null|
| A3|  B3|  C3|null|
| A4|null|null|  D4|
+---+----+----+----+
Теперь вопрос - как спарком поизящнее сделать такой же джойн, но для каждого конкретного значения в колонке A? Или без select distinct и затем fold не получится? Пример результата:
+---+----+----+----+
|  A|   B|   C|   D|
+---+----+----+----+
| A1|  B1|  C1|  D1|
| A4|null|null|  D4|  <- full outer join A1 values with second dataset

| A1|null|null|  D1|
| A2|  B2|  C2|null|
| A4|null|null|  D4|   <- full outer join A2 values with second dataset

| A1|null|null|  D1|
| A3|  B3|  C3|null|   <- full outer join A3 values with second dataset
| A4|null|null|  D4|
+---+----+----+----+
И ещё фильтр A.isNotNull добавить, походу  сложится так, как надо
источник

AZ

Anton Zadorozhniy in Data Engineers
в любом случае | A1|null|null|  D1| это кросс джоин, но я пока не понимаю вашу логику почему их две
источник

A

Aleksandr in Data Engineers
Иван Калининский
И ещё фильтр A.isNotNull добавить, походу  сложится так, как надо
с cross join пока не вышло
источник

ИК

Иван Калининский... in Data Engineers
Aleksandr
с cross join пока не вышло
Интересно, щас попробую воспроизвести пример
источник

A

Aleksandr in Data Engineers
Anton Zadorozhniy
в любом случае | A1|null|null|  D1| это кросс джоин, но я пока не понимаю вашу логику почему их две
попробуйте сджойнить (full outer) правый датасет с левым, для каждого уникального A (A1,A2,A3)
источник

ПФ

Паша Финкельштейн... in Data Engineers
Переслано от Dmitriy Titov
источник

AZ

Anton Zadorozhniy in Data Engineers
Aleksandr
попробуйте сджойнить (full outer) правый датасет с левым, для каждого уникального A (A1,A2,A3)
я понял, у вас плохо оформлен вопрос)
источник

A

Aleksandr in Data Engineers
Anton Zadorozhniy
я понял, у вас плохо оформлен вопрос)
наверное :)
источник

AZ

Anton Zadorozhniy in Data Engineers
таблицы надо поименовать, а в примере указать какие колонки (например джоиним Т1 и Т2, на выходе T2.A, T1.B, T1.C. T2.D) тогда будет понятнее чего вы хотите
источник

AZ

Anton Zadorozhniy in Data Engineers
или мб у вас на выходе COALESCE(T1.A, T2.A)
источник

AZ

Anton Zadorozhniy in Data Engineers
Aleksandr
наверное :)
и кросс джоин не сможет дать вам результат | A1|null|null|  D1| так как у вас А1 есть в обеих таблицах
источник

A

Aleksandr in Data Engineers
да, я сейчас думаю как переформулировать вопрос :)
источник

ИК

Иван Калининский... in Data Engineers
Aleksandr
да, я сейчас думаю как переформулировать вопрос :)
Не надо переформулировать ^^
источник

AZ

Anton Zadorozhniy in Data Engineers
Aleksandr
да, я сейчас думаю как переформулировать вопрос :)
если первая таблица т1 и вторая т2 то можно так, но все равно 6 строчек, еще пару пустых а1/а4 нехватает (не понимаю логику как у вас так может быть)

sel coalesce(t1.a, t2.a) a, t1.b, t1.c, t2.d
from t1
full outer join t2
on t1.a = t2.a
union all
sel a, cast(null as char(2)) b, cast(null as char(2)) c, d
from t2
источник

AZ

Anton Zadorozhniy in Data Engineers
что-то у вас в логике не так, если джоинить таблицы из 2 и 3 строк то никак больше 6 строк не может получиться, а вы хотите 8)
источник