Size: a a a

2021 October 26

S

Sebastian in Data Engineers
запустил. как сделать персист?
источник

GP

Grigory Pomadchin in Data Engineers
.persist
источник

GP

Grigory Pomadchin in Data Engineers
источник

AE

Alexey Evdokimov in Data Engineers
кастомер зашёл в аккаунт, выбрал датасеты из библиотеки, собрал процесс для просчёта показометров, проставил ему 100500 параметров, задал расписание, и получил витрину, которая сама себя пересчитывает при доливке. и платит потом за расчётное время, или по подписочке
источник

ИК

Иван Калининский... in Data Engineers
Пока что получается вот такой оператор (без обёрток):

df.limit(1).groupBy().count().queryExecution.executedPlan.executeCollect().head.getLong(0)

executeCollect() уже возвращает локальную коллекцию, так что дальше можно не смотреть.
Но походу, всё дело в limit(1), который создаёт GlobalLimit, которому нужно распределение с числом партиций 1, а это coalesce, который будет добавлен в какой-то стратегии.
Дальше мысль не идёт, как связать с моментом кеширования не вижу. Ещё посмотрю ближе к ночи
источник

N

Nikita Blagodarnyy in Data Engineers
Нас обманывали всё это время с .head() ?
источник

MT

Mikhail Tsion in Data Engineers
Всем привет!
Кто сталкивался с подобной проблемой с Кассандрой?

после цепочки вызовов:
DROP TABLE IF EXISTS keyspace.tablename;
CREATE TABLE IF NOT EXISTS keyspace.tablename(....);

(крч пересоздание таблички через дроп), по итогу keyspace.tablename может не создасться, при этом не выплюнув ни ворнинг, ни ошибку.

Используемая версия Кассандры 3.11.7. Подобный вопрос (не точь-в-точь) находил у датастаксов на форумах, но все это относилось к версиям <2.1.
источник

t

tenKe in Data Engineers
парщиал кешинг же будет
источник

A

Alex in Data Engineers
в общем глянул код
в случае head это работает, потому что там внутри используется executeCollect

в случае isEmpty collect будет лишь на отдельных партициях

поэтому head безопасно вызывать, чтобы всё тригернуть
isEmpty - только часть партиций закеширует
источник

A

Alex in Data Engineers
да, но это немного не то что ожидается от него
источник

DZ

Dmitry Zuev in Data Engineers
headOption
источник

DZ

Dmitry Zuev in Data Engineers
+getOrElse
источник

GP

Grigory Pomadchin in Data Engineers
как же нравится мне эта глина; вместо норм апи
источник

GP

Grigory Pomadchin in Data Engineers
сделали бы какойнить .persist(strict = true) и все
источник

t

tenKe in Data Engineers
под капотом limit(1) вот эт:

trait BaseLimitExec extends UnaryExecNode with CodegenSupport {
 val limit: Int
 override def output: Seq[Attribute] = child.output

 protected override def doExecute(): RDD[InternalRow] = child.execute().mapPartitions { iter =>
   iter.take(limit)
 }
источник

A

Alex in Data Engineers
я тоже этого не понимаю до сих пор
источник

GP

Grigory Pomadchin in Data Engineers
как мило
источник

t

tenKe in Data Engineers
источник

A

Alex in Data Engineers
да, правда doExecute не выполняется в момент вызова, а лишь возвращает другую RDD
источник

A

Alex in Data Engineers
как и почти все execute()
источник