в том топике решение с СУБД так и не приведено же.
По-хорошему, вы бы реализовали свой подход и сравнили с предложенными решениями и тыкали страждущих цифрами.
Re[2]: [Ref] Почему не смогли применить готовое решение для
Здравствуйте, syrompe, Вы писали:
S>в том топике решение с СУБД так и не приведено же. S>По-хорошему, вы бы реализовали свой подход и сравнили с предложенными решениями и тыкали страждущих цифрами.
Я попробовал с встраиваемой LevelDB — не возможно сделать быстро, будет на порядки медленнее при кастомной сортировке.
Как найти подходящую DB — не знаю. Это если ты случайно с этим столкнулся — то сможешь быстро решить, а так это нужен уровень архитектора матрицы не иначе как.
Вроде бы задача простая и должна подойти любая СУБД. Но на практике нет — для больших данных они не подходят — нет режима импорта больших данных, только поддержка.
Дайте для начала определение простоты.
Вон Рич Хикки два часа об этом рассуждал, но я так и не понял.
Просто ли ездить на велике? кому как.
Просто. Легко. Сложно.
И самый заменитый вопрос Хикки задайте себе:
И мне нравится задавать этот вопрос: что верно
для каждой ошибки, найденной в продакшене?
S>Как найти подходящую DB — не знаю. Это если ты случайно с этим столкнулся — то сможешь быстро решить, а так это нужен уровень архитектора матрицы не иначе как.
чувак, это уровень джуна на позицию Data engineer. классический вопрос для джуна на такую позицию, как отсортировать файлик имея ограничение в памяти, ожидается что джун расскажет о map-reduce алгоритмах, от мида ожидается минут за 15 готовый код.
Re[4]: [Ref] Почему не смогли применить готовое решение для
Здравствуйте, Gt_, Вы писали:
Gt_>чувак, это уровень джуна на позицию Data engineer. классический вопрос для джуна на такую позицию, как отсортировать файлик имея ограничение в памяти, ожидается что джун расскажет о map-reduce алгоритмах, от мида ожидается минут за 15 готовый код.
А почему же никто не смог продолжить готового решения? Может вы являетесь не просто балаболом, как все тут могли подумать, а на самом деле знаете о чем говорите? Давайте ваше решение — оценим.
Re[5]: [Ref] Почему не смогли применить готовое решение для
Gt_>>чувак, это уровень джуна на позицию Data engineer. классический вопрос для джуна на такую позицию, как отсортировать файлик имея ограничение в памяти, ожидается что джун расскажет о map-reduce алгоритмах, от мида ожидается минут за 15 готовый код.
S>А почему же никто не смог продолжить готового решения? Может вы являетесь не просто балаболом, как все тут могли подумать, а на самом деле знаете о чем говорите? Давайте ваше решение — оценим.
Памяти сколько было задействовано? Я там задал вопрос вам происходила ли сортировка в памяти или нет?
Видимо знаете в чем дело? Вас просто научили использовать некий инструмент, суть которого вы до конца не понимаете. Не знаете как там внутри все работает. Но вы думаете что этот инструмент наиболее подходит для данной задачи — возможно так и совпало случайно — это мы еще не выяснили (т.к. вы сами не знаете происходила ли сортировка 100% в памяти или нет) — и вы уже начали хорохориться и бросаться какашками — мол задача легко решается.
Сначала разберитесь происходит ли сортировка в памяти или нет — если чисто в памяти — то не оно.
Gt_>>к чему эта клоунада ?
S>Памяти сколько было задействовано? Я там задал вопрос вам происходила ли сортировка в памяти или нет?
S>Видимо знаете в чем дело? Вас просто научили использовать некий инструмент, суть которого вы до конца не понимаете. Не знаете как там внутри все работает. Но вы думаете что этот инструмент наиболее подходит для данной задачи — возможно так и совпало случайно — это мы еще не выяснили (т.к. вы сами не знаете происходила ли сортировка 100% в памяти или нет) — и вы уже начали хорохориться и бросаться какашками — мол задача легко решается.
S>Сначала разберитесь происходит ли сортировка в памяти или нет — если чисто в памяти — то не оно.
чувак, ты не тянешь на позицию джуна но пытаешься оценивать. это глупо. я тебе уже разжевал, что от джуна требуется знания самых базовых патернов, начиная с map-reduce. map-reduce глобальный ответ о том как работает внутри этот инструмент.
я не знаю как там карта легла на моей машине, может на столько крошеный файл ему этих 5-6 гигов, но дело не в том как у меня карта легла, а том что сам патерн позволят пережевывать много большие данные, чем памяти на машине.
Re[8]: [Ref] Почему не смогли применить готовое решение для
Здесь до тебя взрослые дядьки решали данную задачу вручную, готовых решений не нашлось, по крайней мере для данной .Net платформы.
Gt_>я тебе уже разжевал, что от джуна требуется знания самых базовых патернов, начиная с map-reduce. map-reduce глобальный ответ о том как работает внутри этот инструмент.
MapReduce — это модель распределенных вычислений — когда нужно разбить и вычислить на n серверах.
Это ты где-то услышал на презентации, запомнил что это круто — и теперь пытаешься хорохориться на форуме взрослых?
Gt_>я не знаю как там карта легла на моей машине, может на столько крошеный файл ему этих 5-6 гигов, но дело не в том как у меня карта легла, а том что сам патерн позволят пережевывать много большие данные, чем памяти на машине.
За счет чего? Понимаешь ли, что паттерн — для распределения данных НА МНОЖЕСТВО машин?
У тебя сколько памяти на машине?
Re[9]: [Ref] Почему не смогли применить готовое решение для
S>Здесь до тебя взрослые дядьки решали данную задачу вручную, готовых решений не нашлось, по крайней мере для данной .Net платформы.
их попросили решать на чистом .net, разрешения юзать обертки вокруг jvm там не было.
но и тут видно что они не столь уж взрослые на этом поприще, я увидел 2 решения и оба однопоточные. но я полагаю и интервьювер хотел увидеть навыки работы с .net, а не мощный параллельный код работающий с unsafe регионами.
S>За счет чего? Понимаешь ли, что паттерн — для распределения данных НА МНОЖЕСТВО машин?
кто тебе такую глупость сказал ? map-reduce это про разбивку задачи на мелкие подзадачи в первую очередь. то что эти подзадачи еще и можно распараллелить хоть в рамках машины, хоть кластера — лишь следствие идеи.
получивший такую задачу джун должен рассказать, что тут map-reduce нужен именно, что бы влезть в рамки по памяти, параллельность просто бонус. очень упрощенно: маппер читает строку и пишет ту же строку в отдельные файлики, в файлик1 строки начинающииеся на А, файлик2 строки начинающиеся на Б — теперь у тебя не один 10г файлик, а десятки, влезающие в память. осталось лишь отсортировать их содержимое и в нужном порядке слепить в конечный результат. это очень упрощенно, но в этом суть и магия инструмента.
Здравствуйте, Gt_, Вы писали:
Gt_>получивший такую задачу джун должен рассказать, что тут map-reduce нужен именно, что бы влезть в рамки по памяти, параллельность просто бонус. очень упрощенно: маппер читает строку и пишет ту же строку в отдельные файлики, в файлик1 строки начинающииеся на А, файлик2 строки начинающиеся на Б — теперь у тебя не один 10г файлик, а десятки, влезающие в память. осталось лишь отсортировать их содержимое и в нужном порядке слепить в конечный результат. это очень упрощенно, но в этом суть и магия инструмента.
Здравствуйте, Gt_, Вы писали:
Gt_>кто тебе такую глупость сказал ? map-reduce это про разбивку задачи на мелкие подзадачи в первую очередь. то что эти подзадачи еще и можно распараллелить хоть в рамках машины, хоть кластера — лишь следствие идеи.
Так что — долго мы будем ждать от вас "решения джуна"? Или уже понял что сел в лужу?
Ну вот распараллелил ты на одной машине — а кто сказал, что объединять работу оно будет не загрузив в память все порции?
В общем — то что вы привели — работает целиком в памяти — а это как раз не годится по условию задачи. Сколько бы не плевался что это типа легко и можно сделать, применив готовое решение — результата мы не видим.
Re[11]: [Ref] Почему не смогли применить готовое решение для
Gt_>>кто тебе такую глупость сказал ? map-reduce это про разбивку задачи на мелкие подзадачи в первую очередь. то что эти подзадачи еще и можно распараллелить хоть в рамках машины, хоть кластера — лишь следствие идеи.
S>Так что — долго мы будем ждать от вас "решения джуна"? Или уже понял что сел в лужу?
S>Ну вот распараллелил ты на одной машине — а кто сказал, что объединять работу оно будет не загрузив в память все порции?
S>В общем — то что вы привели — работает целиком в памяти — а это как раз не годится по условию задачи. Сколько бы не плевался что это типа легко и можно сделать, применив готовое решение — результата мы не видим.
ты в серьез ждал, что я буду пересказывать вводные статьи о спарке ? эти статьи рассчитаны на джуна после школы. какой мне смысл с тобой, убогим возится, если ты ищешь буквы А и Б в коде ?
Re[12]: [Ref] Почему не смогли применить готовое решение для
Здравствуйте, Gt_, Вы писали:
Gt_>ты в серьез ждал, что я буду пересказывать вводные статьи о спарке ? эти статьи рассчитаны на джуна после школы. какой мне смысл с тобой, убогим возится, если ты ищешь буквы А и Б в коде ?
Я вам задал конкретный вопрос: сколько памяти потребляет ваше решение? Загружает ли оно все данные целиком в память или нет?
Ты просто взял загрузил все данные в память, взял 10 Гб., памяти в системе у тебя 32. И с радостью отрапортовал что вы тут все дурью маетесь — вы все немудрые, потому что нужно использовать готовые решения, а не велосипедить. Звучит заманчиво. Однако же задача не решена — суть задачи в том, чтобы отработать не загружая данные в память целиком.
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] Почему не смогли применить готовое решение для
Gt_>>25G файл отсортировал спарк процесс который в пике отожрал 2.3G
S>Что значит это: repartition(1) ?
S>Понимаете ли как оно работает внутри? Как оно сортирует данные без загрузки в память всего массива данных?
да, понимаю. на позицию джуна у меня твердые знания. под низом там обычные java streams. ты если стримами вычитываешь файл и тут же записывешь, тоже ожидаешь, что весь терабайт в память залезет и лишь потом пойдет запись ? чувак, что у тебя за опыт в ИТ ?
Re[16]: [Ref] Почему не смогли применить готовое решение для
Здравствуйте, Gt_, Вы писали:
Gt_>да, понимаю. на позицию джуна у меня твердые знания. под низом там обычные java streams. ты если стримами вычитываешь файл и тут же записывешь, тоже ожидаешь, что весь терабайт в память залезет и лишь потом пойдет запись ? чувак, что у тебя за опыт в ИТ ?
Сортировка как происходит? Ведь чтобы отсортировать — нужно сравнить друг с другом все строки файла. То есть считывать нужно частями, однако все части должны быть сравнены между собой.
Можно полностью всю данные держать на диске — загружать в память только 2 строки — к примеру, с помощью алгоритма B-Tree. Но получится в десятки раз медленнее.
Какой алгоритм там применен, что позволяет не считывать все данные с диска в память и одновременно с этим обеспечить высокую скорость сортировки?