Size: a a a

2019 August 06

K

KrivdaTheTriewe in Data Engineers
case class Person(id: Long, name: String, cityId: Long)
case class City(id: Long, name: String)
val family = Seq(
 Person(0, "Agata", 0),
 Person(1, "Iweta", 0),
 Person(2, "Patryk", 2),
 Person(3, "Maksym", 0)).toDS
val cities = Seq(
 City(0, "Warsaw"),
 City(1, "Washington"),
 City(2, "Sopot")).toDS

val joined = family.joinWith(cities, family("cityId") === cities("id"))
scala> joined.printSchema
root
|-- _1: struct (nullable = false)
|    |-- id: long (nullable = false)
|    |-- name: string (nullable = true)
|    |-- cityId: long (nullable = false)
|-- _2: struct (nullable = false)
|    |-- id: long (nullable = false)
|    |-- name: string (nullable = true)
scala> joined.show
источник

ПФ

Паша Финкельштейн in Data Engineers
KrivdaTheTriewe
def joinWith[U](other: Dataset[U], condition: Column, joinType: String): Dataset[(T, U)] = {
Принято. Даже тут у нас нетипизированный джойн и нетипизированный тип джойна
источник

ПФ

Паша Финкельштейн in Data Engineers
Но что дальше с этим делать?
источник

ПФ

Паша Финкельштейн in Data Engineers
Ещё раз, map - не операция за которой мне нужен датасет
источник

В

Вадим in Data Engineers
KrivdaTheTriewe
где dataframe.as[Case classs].map(x=>) не типизированный то
каст мне больше нравился. Топово же
источник

ПФ

Паша Финкельштейн in Data Engineers
Потому что вот что скала всегда умела - это apply сделать
источник

K

KrivdaTheTriewe in Data Engineers
Паша Финкельштейн
Ещё раз, map - не операция за которой мне нужен датасет
а какая же
источник

K

KrivdaTheTriewe in Data Engineers
если там весь etl происходит
источник

K

KrivdaTheTriewe in Data Engineers
def groupByKey[K](func: MapFunction[T, K], encoder: Encoder[K]): KeyValueGroupedDataset[K, T] =
источник

ПФ

Паша Финкельштейн in Data Engineers
А вот что при лефтджойне  справа может быть null - это важно
источник

K

KrivdaTheTriewe in Data Engineers
map как раз таки самая основная и базовая операция
источник

ПФ

Паша Финкельштейн in Data Engineers
KrivdaTheTriewe
def groupByKey[K](func: MapFunction[T, K], encoder: Encoder[K]): KeyValueGroupedDataset[K, T] =
Правда тут нам придётся заводить энкодер для каждой отдельной группировки
источник

K

KrivdaTheTriewe in Data Engineers
он уже есть
источник

ПФ

Паша Финкельштейн in Data Engineers
Это если ты по одной колонке группируешь
источник

ПФ

Паша Финкельштейн in Data Engineers
Тебе часто надо про нескольким
источник

K

KrivdaTheTriewe in Data Engineers
ты группируешь по ключу
источник

K

KrivdaTheTriewe in Data Engineers
и прочие штуки делаешь
источник

ПФ

Паша Финкельштейн in Data Engineers
Ключ бывает композитным
источник

ПФ

Паша Финкельштейн in Data Engineers
Вот прям у нас с тобой в коде такое есть
источник

K

KrivdaTheTriewe in Data Engineers
этого я предлагаю не касаться
источник