Size: a a a

2019 August 06

ПФ

Паша Финкельштейн in Data Engineers
И оставлю скорее всего
источник

ПФ

Паша Финкельштейн in Data Engineers
Но не трогать и не уметь - разные виды неделания
источник

ПФ

Паша Финкельштейн in Data Engineers
Grigory Pomadchin
давай примеры, код покажи который скомплиировать можно;
и типы конкретные (можешь синтетический же пример написать чтоб падал и / или работал)
Попробую завтра сделать
источник

ПФ

Паша Финкельштейн in Data Engineers
На сегодня силы закончились
источник

K

KrivdaTheTriewe in Data Engineers
Паша Финкельштейн
Слушай, ну я учусь же. Надо понимать что и как работает. Конечно я всё мог оставить как было
ну я ничего же не говорю
источник

GP

Grigory Pomadchin in Data Engineers
да; просто что бы ты понимал, не очень связанно выглядит то что ты написал; больше как поток мыслей
после истории с анкодерами для таплов и продактов, я бы рекоммендовал более цельно излагать проблему

потому что она и сейчас выглядит размазанно
источник

ПФ

Паша Финкельштейн in Data Engineers
Grigory Pomadchin
да; просто что бы ты понимал, не очень связанно выглядит то что ты написал; больше как поток мыслей
после истории с анкодерами для таплов и продактов, я бы рекоммендовал более цельно излагать проблему

потому что она и сейчас выглядит размазанно
Хых, понимаю. Ну завтра я глядишь синтетику напишу
источник

AZ

Anton Zadorozhniy in Data Engineers
пардон, с повторами или без?
источник

ПФ

Паша Финкельштейн in Data Engineers
Anton Zadorozhniy
пардон, с повторами или без?
Ну в тестах точно без, а в реальности может быть с
источник

AZ

Anton Zadorozhniy in Data Engineers
Паша Финкельштейн
Ну в тестах точно без, а в реальности может быть с
ну без повторов (надо только функцию бинарь починить) в лоб вот как-то так
источник

AZ

Anton Zadorozhniy in Data Engineers
case class Customer(custID: Int, segment: String, value: Long)

val ds = Seq(Customer(1, "regular", 1),Customer(2, "regular", 2),Customer(3, "ninja", 1)).toDS()

ds.show()

def topValue(a: Customer, b: Customer): Customer = { if (a.value > b.value) a else b }

val topCustomers = ds.groupByKey(_.segment).reduceGroups(topValue _).map(_._2)

topCustomers.show()
источник

GP

Grigory Pomadchin in Data Engineers
Anton Zadorozhniy
case class Customer(custID: Int, segment: String, value: Long)

val ds = Seq(Customer(1, "regular", 1),Customer(2, "regular", 2),Customer(3, "ninja", 1)).toDS()

ds.show()

def topValue(a: Customer, b: Customer): Customer = { if (a.value > b.value) a else b }

val topCustomers = ds.groupByKey(_.segment).reduceGroups(topValue _).map(_._2)

topCustomers.show()
topValue может и строки сравнивать; завтра нам синтетику подгонит он; может пока синтетику будет делать разберется в чем дело
источник

AZ

Anton Zadorozhniy in Data Engineers
ну надо явной функцией написать что вам нужно сравнивать и какие критерии, но в этом и прелесть Dataset API - это будет явная функция, которую можно будет нормально протестировать
источник

GP

Grigory Pomadchin in Data Engineers
+ поэтому @optician_owl упомянул типы конкретные
источник

AZ

Anton Zadorozhniy in Data Engineers
и хороший пример typesafe агрегации есть в документации https://spark.apache.org/docs/latest/sql-getting-started.html#type-safe-user-defined-aggregate-functions
источник

OK

Oleg Kovalov in Data Engineers
всем привет
источник

ПФ

Паша Финкельштейн in Data Engineers
Спрашивали? Отвечаем. mapGroups работает с итератором. КОторый по определению можно пройти только один раз. Превращаем его в итерэбл и всё работает
источник
2019 August 07

GP

Grigory Pomadchin in Data Engineers
Паша Финкельштейн
Если итератор превращать в лист — то работает всё
Вроде это тут ясно; сложно было догадаться о том что ты в коде делал не смотря в код
источник

ПФ

Паша Финкельштейн in Data Engineers
Grigory Pomadchin
Вроде это тут ясно; сложно было догадаться о том что ты в коде делал не смотря в код
ну да, видишь, я не понимал какая часть важна. А важна часть с внимательным рассматриванием сигнатуры

Ну и заодно использовать mapGroups вообще плохая идея: он требует шаффла, так что если мжно избежать — лучше избежать.  Так что я всё еределал на reduceGroups
источник

RI

Rustam Iksanov in Data Engineers
Инженеры. Продолжаю свои мучения с spark-phoenix. спарк джоба просто встает на этапе записи в феникс. На другом кластере джоба работает без проблем. Через spark-shell запись в феникс происходит. куда копать?
источник