Подскажите почему в spark не прокатывает. надо в мелкий

паркет по одной записи добавлять. java, делаю датасет с новой строкой, читаю паркет, делаю union + coalesce(1) с новой строкой, кеширую StorageLevel.MEMORY_ONLY()
засада в том что если я полученный датасет записываю в то же место, он ругается, что старый файл в папке таблицы пропал. я не понимаю зачем он еще что-то читает с папки таблицы, все что нужно вроде в памяти кеша. я понимаю что могу записать в другое место, вопрос скорее теоретический почему не прокатывает ?

11 ответов

34 просмотра

Я не уверен в правильности своего ответа, но дело, думаю, в том, что план запроса - это ацикличный граф, и ты как бы не можешь просто взять и в середине или в конце изменить исходные шаги.

Dmitry- Автор вопроса

так cache вроде терминальня команда, план выполнился, в память затянул. если я обращаюсь к данным датасета, они же в памяти, зачем падать из-за того что сам же файлик затираешь

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

Cache/persist не Action, не терминальная команда. Она такая же ленивая, как и прочие трансформации. Нужно хоть раз затянуть данные до записи, тогда, возможно (возможно) прокатит. Затянуть можно так: dfCached.foreach(_ => ()) И лучше avro в этом кейсе. На худой конец текст (json, csv).

лучше каунт

А не .show(1)?

нет, show(1) точно не стоит, тк он посчитает минимальное количество партиций, для того, чтобы отобразить результат - скорее всего это будет одна партиция и только она уедет в кеши. В итоге у тебя будет partial caching

Подожди, могут кэшироваться не все партиции?

конечно

Да, ты прав

Если вместо кэша сделать чекпоинт, то прокатит, но он просто промежуточные данные сложит в темп папку

Похожие вопросы

Обсуждают сегодня

Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта