[Ref] Почему не смогли применить готовое решение для простой задачи?
От: Shmj Ниоткуда  
Дата: 27.09.22 07:51
Оценка:
Просьба высказаться: https://rsdn.org/forum/design/8370196.flat
Автор: Shmj
Дата: 27.09.22
Re: [Ref] Почему не смогли применить готовое решение для простой задачи?
От: syrompe  
Дата: 27.09.22 12:57
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Просьба высказаться: https://rsdn.org/forum/design/8370196.flat
Автор: Shmj
Дата: 27.09.22


в том топике решение с СУБД так и не приведено же.
По-хорошему, вы бы реализовали свой подход и сравнили с предложенными решениями и тыкали страждущих цифрами.
Re[2]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 27.09.22 13:13
Оценка:
Здравствуйте, syrompe, Вы писали:

S>в том топике решение с СУБД так и не приведено же.

S>По-хорошему, вы бы реализовали свой подход и сравнили с предложенными решениями и тыкали страждущих цифрами.

Я попробовал с встраиваемой LevelDB — не возможно сделать быстро, будет на порядки медленнее при кастомной сортировке.

Как найти подходящую DB — не знаю. Это если ты случайно с этим столкнулся — то сможешь быстро решить, а так это нужен уровень архитектора матрицы не иначе как.

Вроде бы задача простая и должна подойти любая СУБД. Но на практике нет — для больших данных они не подходят — нет режима импорта больших данных, только поддержка.
Отредактировано 27.09.2022 13:14 Shmj . Предыдущая версия .
Re: [Ref] Почему не смогли применить готовое решение для простой задачи?
От: SergeyIT Россия  
Дата: 27.09.22 20:49
Оценка: +2
Здравствуйте, Shmj, Вы писали:

Так разберись с "простой задачей" и нам расскажешь.
Извините, я все еще учусь
Re: [Ref] Почему не смогли применить готовое решение для простой задачи?
От: vaa  
Дата: 28.09.22 01:33
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Просьба высказаться: https://rsdn.org/forum/design/8370196.flat
Автор: Shmj
Дата: 27.09.22


Дайте для начала определение простоты.
Вон Рич Хикки два часа об этом рассуждал, но я так и не понял.
Просто ли ездить на велике? кому как.
Просто. Легко. Сложно.

И самый заменитый вопрос Хикки задайте себе:

И мне нравится задавать этот вопрос: что верно
для каждой ошибки, найденной в продакшене?


ответ
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: [Ref] Почему не смогли применить готовое решение для
От: Gt_  
Дата: 28.09.22 06:45
Оценка: 1 (1) -1
S>Как найти подходящую DB — не знаю. Это если ты случайно с этим столкнулся — то сможешь быстро решить, а так это нужен уровень архитектора матрицы не иначе как.

чувак, это уровень джуна на позицию Data engineer. классический вопрос для джуна на такую позицию, как отсортировать файлик имея ограничение в памяти, ожидается что джун расскажет о map-reduce алгоритмах, от мида ожидается минут за 15 готовый код.
Re[4]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 28.09.22 08:01
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>чувак, это уровень джуна на позицию Data engineer. классический вопрос для джуна на такую позицию, как отсортировать файлик имея ограничение в памяти, ожидается что джун расскажет о map-reduce алгоритмах, от мида ожидается минут за 15 готовый код.


А почему же никто не смог продолжить готового решения? Может вы являетесь не просто балаболом, как все тут могли подумать, а на самом деле знаете о чем говорите? Давайте ваше решение — оценим.
Re[5]: [Ref] Почему не смогли применить готовое решение для
От: Gt_  
Дата: 28.09.22 09:30
Оценка:
Gt_>>чувак, это уровень джуна на позицию Data engineer. классический вопрос для джуна на такую позицию, как отсортировать файлик имея ограничение в памяти, ожидается что джун расскажет о map-reduce алгоритмах, от мида ожидается минут за 15 готовый код.

S>А почему же никто не смог продолжить готового решения? Может вы являетесь не просто балаболом, как все тут могли подумать, а на самом деле знаете о чем говорите? Давайте ваше решение — оценим.


тебе решение на спарке выдали в августе: http://rsdn.org/forum/job/8348407
Автор: Gt_
Дата: 31.08.22

к чему эта клоунада ?
Re[6]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 28.09.22 10:33
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>тебе решение на спарке выдали в августе: http://rsdn.org/forum/job/8348407
Автор: Gt_
Дата: 31.08.22

Gt_>к чему эта клоунада ?

Памяти сколько было задействовано? Я там задал вопрос вам происходила ли сортировка в памяти или нет?

Видимо знаете в чем дело? Вас просто научили использовать некий инструмент, суть которого вы до конца не понимаете. Не знаете как там внутри все работает. Но вы думаете что этот инструмент наиболее подходит для данной задачи — возможно так и совпало случайно — это мы еще не выяснили (т.к. вы сами не знаете происходила ли сортировка 100% в памяти или нет) — и вы уже начали хорохориться и бросаться какашками — мол задача легко решается.

Сначала разберитесь происходит ли сортировка в памяти или нет — если чисто в памяти — то не оно.
Отредактировано 28.09.2022 10:55 Shmj . Предыдущая версия .
Re[7]: [Ref] Почему не смогли применить готовое решение для
От: Gt_  
Дата: 28.09.22 11:23
Оценка:
Gt_>>тебе решение на спарке выдали в августе: http://rsdn.org/forum/job/8348407
Автор: Gt_
Дата: 31.08.22

Gt_>>к чему эта клоунада ?

S>Памяти сколько было задействовано? Я там задал вопрос вам происходила ли сортировка в памяти или нет?


S>Видимо знаете в чем дело? Вас просто научили использовать некий инструмент, суть которого вы до конца не понимаете. Не знаете как там внутри все работает. Но вы думаете что этот инструмент наиболее подходит для данной задачи — возможно так и совпало случайно — это мы еще не выяснили (т.к. вы сами не знаете происходила ли сортировка 100% в памяти или нет) — и вы уже начали хорохориться и бросаться какашками — мол задача легко решается.


S>Сначала разберитесь происходит ли сортировка в памяти или нет — если чисто в памяти — то не оно.


чувак, ты не тянешь на позицию джуна но пытаешься оценивать. это глупо. я тебе уже разжевал, что от джуна требуется знания самых базовых патернов, начиная с map-reduce. map-reduce глобальный ответ о том как работает внутри этот инструмент.
я не знаю как там карта легла на моей машине, может на столько крошеный файл ему этих 5-6 гигов, но дело не в том как у меня карта легла, а том что сам патерн позволят пережевывать много большие данные, чем памяти на машине.
Re[8]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 28.09.22 13:00
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>чувак, ты не тянешь на позицию джуна но пытаешься оценивать. это глупо


Ты осознаешь что делаешь? Вот это: https://rsdn.org/forum/life/8371357.flat
Автор: Shmj
Дата: 28.09.22


Давай без перехода на личности — по сути.

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

Gt_>я тебе уже разжевал, что от джуна требуется знания самых базовых патернов, начиная с map-reduce. map-reduce глобальный ответ о том как работает внутри этот инструмент.


MapReduce — это модель распределенных вычислений — когда нужно разбить и вычислить на n серверах.

Это ты где-то услышал на презентации, запомнил что это круто — и теперь пытаешься хорохориться на форуме взрослых?

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


За счет чего? Понимаешь ли, что паттерн — для распределения данных НА МНОЖЕСТВО машин?

У тебя сколько памяти на машине?
Re[9]: [Ref] Почему не смогли применить готовое решение для
От: Gt_  
Дата: 28.09.22 13:47
Оценка: +1
S>Здесь до тебя взрослые дядьки решали данную задачу вручную, готовых решений не нашлось, по крайней мере для данной .Net платформы.

их попросили решать на чистом .net, разрешения юзать обертки вокруг jvm там не было.
но и тут видно что они не столь уж взрослые на этом поприще, я увидел 2 решения и оба однопоточные. но я полагаю и интервьювер хотел увидеть навыки работы с .net, а не мощный параллельный код работающий с unsafe регионами.

S>За счет чего? Понимаешь ли, что паттерн — для распределения данных НА МНОЖЕСТВО машин?


кто тебе такую глупость сказал ? map-reduce это про разбивку задачи на мелкие подзадачи в первую очередь. то что эти подзадачи еще и можно распараллелить хоть в рамках машины, хоть кластера — лишь следствие идеи.
получивший такую задачу джун должен рассказать, что тут map-reduce нужен именно, что бы влезть в рамки по памяти, параллельность просто бонус. очень упрощенно: маппер читает строку и пишет ту же строку в отдельные файлики, в файлик1 строки начинающииеся на А, файлик2 строки начинающиеся на Б — теперь у тебя не один 10г файлик, а десятки, влезающие в память. осталось лишь отсортировать их содержимое и в нужном порядке слепить в конечный результат. это очень упрощенно, но в этом суть и магия инструмента.
Отредактировано 28.09.2022 14:02 Gt_ . Предыдущая версия . Еще …
Отредактировано 28.09.2022 14:00 Gt_ . Предыдущая версия .
Re[10]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 28.09.22 14:42
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>получивший такую задачу джун должен рассказать, что тут map-reduce нужен именно, что бы влезть в рамки по памяти, параллельность просто бонус. очень упрощенно: маппер читает строку и пишет ту же строку в отдельные файлики, в файлик1 строки начинающииеся на А, файлик2 строки начинающиеся на Б — теперь у тебя не один 10г файлик, а десятки, влезающие в память. осталось лишь отсортировать их содержимое и в нужном порядке слепить в конечный результат. это очень упрощенно, но в этом суть и магия инструмента.


Да? А где это у вас:

@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class BigFile {

    @Test
    void bigfile0() throws IOException {
        SparkSession spark = SparkSession
                .builder()
                .appName("delta")
                .master("local[*]")
                .getOrCreate();

        spark.read()
                .option("delimiter", ".")
                .csv("D:/TEST")
                .sort("_c1", "_c0")
                .repartition(1)
                .write()
                .option("delimiter", ".")
                .csv("D:/TEST_COMBINED");


    }


Где вы тут распределяете по буквам и сохраняете в отдельный файл каждую букву? Где это решение?

Давайте рассмотрим практическое решение. Подобный алгоритм — разбиение на буквы — уже приводился участником форума.

Вы знаете как сконфигурировать spark для подобной задачи на практике?
Отредактировано 28.09.2022 14:44 Shmj . Предыдущая версия .
Re[10]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 29.09.22 20:23
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>кто тебе такую глупость сказал ? map-reduce это про разбивку задачи на мелкие подзадачи в первую очередь. то что эти подзадачи еще и можно распараллелить хоть в рамках машины, хоть кластера — лишь следствие идеи.


Так что — долго мы будем ждать от вас "решения джуна"? Или уже понял что сел в лужу?

Ну вот распараллелил ты на одной машине — а кто сказал, что объединять работу оно будет не загрузив в память все порции?

В общем — то что вы привели — работает целиком в памяти — а это как раз не годится по условию задачи. Сколько бы не плевался что это типа легко и можно сделать, применив готовое решение — результата мы не видим.
Re[11]: [Ref] Почему не смогли применить готовое решение для
От: Gt_  
Дата: 29.09.22 21:31
Оценка:
Gt_>>кто тебе такую глупость сказал ? map-reduce это про разбивку задачи на мелкие подзадачи в первую очередь. то что эти подзадачи еще и можно распараллелить хоть в рамках машины, хоть кластера — лишь следствие идеи.

S>Так что — долго мы будем ждать от вас "решения джуна"? Или уже понял что сел в лужу?


S>Ну вот распараллелил ты на одной машине — а кто сказал, что объединять работу оно будет не загрузив в память все порции?


S>В общем — то что вы привели — работает целиком в памяти — а это как раз не годится по условию задачи. Сколько бы не плевался что это типа легко и можно сделать, применив готовое решение — результата мы не видим.


ты в серьез ждал, что я буду пересказывать вводные статьи о спарке ? эти статьи рассчитаны на джуна после школы. какой мне смысл с тобой, убогим возится, если ты ищешь буквы А и Б в коде ?
Re[12]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 30.09.22 06:39
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>ты в серьез ждал, что я буду пересказывать вводные статьи о спарке ? эти статьи рассчитаны на джуна после школы. какой мне смысл с тобой, убогим возится, если ты ищешь буквы А и Б в коде ?


Я вам задал конкретный вопрос: сколько памяти потребляет ваше решение? Загружает ли оно все данные целиком в память или нет?

Ты просто взял загрузил все данные в память, взял 10 Гб., памяти в системе у тебя 32. И с радостью отрапортовал что вы тут все дурью маетесь — вы все немудрые, потому что нужно использовать готовые решения, а не велосипедить. Звучит заманчиво. Однако же задача не решена — суть задачи в том, чтобы отработать не загружая данные в память целиком.
Отредактировано 30.09.2022 6:42 Shmj . Предыдущая версия .
Re[13]: [Ref] Почему не смогли применить готовое решение для
От: Gt_  
Дата: 30.09.22 08:53
Оценка: 1 (1)
S>Я вам задал конкретный вопрос: сколько памяти потребляет ваше решение? Загружает ли оно все данные целиком в память или нет?

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

S>Ты просто взял загрузил все данные в память, взял 10 Гб., памяти в системе у тебя 32. И с радостью отрапортовал что вы тут все дурью маетесь — вы все немудрые, потому что нужно использовать готовые решения, а не велосипедить. Звучит заманчиво. Однако же задача не решена — суть задачи в том, чтобы отработать не загружая данные в память целиком.


хорошо, я потратил еще 10 минут и собрал отдельный проект, собрал uber jar и запустил как полагается через spark-submit:
spark-submit2.cmd --class org.example.Main --master local[8] --driver-memory 2g srt-uber-1.0-SNAPSHOT.jar

25G файл отсортировал спарк процесс который в пике отожрал 2.3G
вот весь код проекта
package org.example;
import org.apache.spark.sql.SparkSession;

public class Main {
    public static void main(String[] args) {
        SparkSession spark = SparkSession
                .builder()
                .appName("delta")
                .master("local[*]")
                .getOrCreate();

        spark.read()
                .option("delimiter", ".")
                .csv("D:/TEST")
                .orderBy("_c1", "_c0")
                .repartition(1)
                .write()
                .option("delimiter", ".")
                .csv("D:/TEST_COMBINED");
    }
}
Re[14]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 30.09.22 09:22
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>25G файл отсортировал спарк процесс который в пике отожрал 2.3G


Что значит это: repartition(1) ?

Понимаете ли как оно работает внутри? Как оно сортирует данные без загрузки в память всего массива данных?
Re[15]: [Ref] Почему не смогли применить готовое решение для
От: Gt_  
Дата: 30.09.22 09:54
Оценка: 1 (1)
Gt_>>25G файл отсортировал спарк процесс который в пике отожрал 2.3G

S>Что значит это: repartition(1) ?


S>Понимаете ли как оно работает внутри? Как оно сортирует данные без загрузки в память всего массива данных?


да, понимаю. на позицию джуна у меня твердые знания. под низом там обычные java streams. ты если стримами вычитываешь файл и тут же записывешь, тоже ожидаешь, что весь терабайт в память залезет и лишь потом пойдет запись ? чувак, что у тебя за опыт в ИТ ?
Re[16]: [Ref] Почему не смогли применить готовое решение для
От: Shmj Ниоткуда  
Дата: 30.09.22 10:05
Оценка:
Здравствуйте, Gt_, Вы писали:

Gt_>да, понимаю. на позицию джуна у меня твердые знания. под низом там обычные java streams. ты если стримами вычитываешь файл и тут же записывешь, тоже ожидаешь, что весь терабайт в память залезет и лишь потом пойдет запись ? чувак, что у тебя за опыт в ИТ ?


Сортировка как происходит? Ведь чтобы отсортировать — нужно сравнить друг с другом все строки файла. То есть считывать нужно частями, однако все части должны быть сравнены между собой.

Можно полностью всю данные держать на диске — загружать в память только 2 строки — к примеру, с помощью алгоритма B-Tree. Но получится в десятки раз медленнее.

Какой алгоритм там применен, что позволяет не считывать все данные с диска в память и одновременно с этим обеспечить высокую скорость сортировки?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.