powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Многопоточный .csv парсер
25 сообщений из 66, страница 2 из 3
Многопоточный .csv парсер
    #39215851
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это задача для бд
вставка из csv файла в базу - самая быстрая.
а вс остальное с данными база сделает оптимально и быстро.
если есть несколько типов логов - их по своим правилам вносить в базу, тут парсить не надо
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39215870
archelite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,


авторТак я о терминологии. В задании тоже не слова нет о группировках и агрегациях?

Нет, оно вообще почему-то на английском) Видимо за одно и уровень владения инглишем проверяют)
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39215878
archelite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

да, в задании есть упоминание о том что можно сделать через БД, попробую пожалуй спасибо за наводку
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39215917
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
archeliteвадя,

да, в задании есть упоминание о том что можно сделать через БД, попробую пожалуй спасибо за наводку
Во-во, я про это ещё с самого утра сказал. По мне, так самый простой путь, я бы именно так и сделал. Если есть проблемы с развёртыванием сервера базы данных, то можно использовать Derby (JavaDB), H2 или SQLite, или ещё какую-нибудь по вашему вкусу.
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39215933
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickВо-во, я про это ещё с самого утра сказал. По мне, так самый простой путь, я бы именно так и сделал. Если есть проблемы с развёртыванием сервера базы данных, то можно использовать Derby (JavaDB), H2 или SQLite, или ещё какую-нибудь по вашему вкусу.
И, не знаю на счёт SQLite, но Derby и H2 имеют штатные процедуры загрузки данных из CSV файлов. Так что даже CVS парсить не придётся.
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39215942
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO Задача автора, чуть сложнее пузырьковой сортировки.

Проблема с парсингом CSV - для меня вообще загадка. Где Вы там видите проблему? Весь парсинг в вопросе автора - это вызов одной ф-ции String.split( "," )
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39215957
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczarcheliteздесь главное алгоритм парсинга, с потоками проблем возникнуть не должно, я знаю как это сделать в принципе.

Тут почти нет конкурентной многопоточности. Каждый поток читает свой файл. Обрабатывает свои данные и складывает их в БД, которая вполне себе разруливает транзакции. Так?...
Я бы сказал, здесь нет алгоритма парсинга... Что здесь сложного в парсинге?
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39215978
archelite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

авторПроблема с парсингом CSV - для меня вообще загадка. Где Вы там видите проблему? Весь парсинг в вопросе автора - это вызов одной ф-ции String.split( "," )

Ну я под парсингом понимаю не только считать информацию, но и преобразовать её к нужному виду. Просто разногласия в терминологии.

Вобщем попробовал еще пару мозголомных вариантов, пока без толку.
Сделал только сортировку по userID

Input
1455812018,user2, http://ru.wikipedia.org,100
1455812019,user10, http://hh.ru,30
1455812968,user3, http://google.com,60
1455812411,user10, http://hh.ru,90
1455812684,user3, http://vk.com,50
1455839970,user1, http://ru.wikipedia.org,70
1455812411,user10, http://hh.ru,90

Output
19-фев-2016 user1 http://ru.wikipedia.org 70
18-фев-2016 user2 http://ru.wikipedia.org 100
18-фев-2016 user3 http://google.com 60
18-фев-2016 user3 http://vk.com 50
18-фев-2016 user10 http://hh.ru 30
18-фев-2016 user10 http://hh.ru 90
18-фев-2016 user10 http://hh.ru 90

Должно быть
19-фев-2016

user1 http://ru.wikipedia.org 70

18-фев-2016

user2 http://ru.wikipedia.org 100
user3 http://google.com 60
user3 http://vk.com 50
user10 http://hh.ru 70

Насчет БД, допустим заполню я таблицу своим Output'ом. Можно будет посчитать среднеарифметическое, но как сделать чтобы одной дате соответствовал набор данных?

Мне по сути нужно сделать вот что: в цикле вытаскивать из объекта значение поля data(18-фев-2016) и если следующее значение соответствует первому, то обнулять последующие пока не встретится новое значение, затем цикл повторяется.
Можете привести такой пример пожалуйста?
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39215983
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНасчет БД, допустим заполню я таблицу своим Output'ом. Можно будет посчитать среднеарифметическое, но как сделать чтобы одной дате соответствовал набор данных?

Мне по сути нужно сделать вот что: в цикле вытаскивать из объекта значение поля data(18-фев-2016) и если следующее значение соответствует первому, то обнулять последующие пока не встретится новое значение, затем цикл повторяется.
Можете привести такой пример пожалуйста?
это нечто
это где так учат????
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216002
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
archelite Можно будет посчитать среднеарифметическое, но как сделать чтобы одной дате соответствовал набор данных?
Не понимаю что вы имеете ввиду. Что за набор данных, соответствующий одной дате? SQL знаете?
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216005
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
golovonometrЯ бы сказал, здесь нет алгоритма парсинга... Что здесь сложного в парсинге?
Да, все как обычно. Автор вывалил на нас свою интерпретацию задания и не особо удосужился задать конкретные вопросы.
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216009
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
archeliteСделал только сортировку по userID

Делайте сортировку по паре Date + userID

при выводе, сохраняйте пред. значение заголовка и выводите заголовок только тогда, когда он изменяется
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
String prevDate = "";
for ( MyData data : list ) {
   String curDate = data.date;
   // Если меняется поле группировки - выводим заголовок
   if ( ! prevDate.equals(  curDate ) ) {
      println( curDate );
      prevDate = curDate;
   }
   // Выводим данные
   println( data.userId + "," + data.url );
}
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216017
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
archeliteНу я под парсингом понимаю не только считать информацию, но и преобразовать её к нужному виду. Просто разногласия в терминологии.

Ну, вот вам и указывают, что терминологию надо привести к общепринятой. Любой проект начинается с терминологии. Иначе участники просто не смогут договориться. Так вот, парсинг, это преобразование некоторого формата данные в переменные, которые ЯП может оперировать. А последующая обработка этих данных это обработка, а не парсинг.

archeliteВобщем попробовал еще пару мозголомных вариантов, пока без толку.

А вопросы будут или только очередное "ничего не получается"?

archeliteНасчет БД, допустим заполню я таблицу своим Output'ом. Можно будет посчитать среднеарифметическое, но как сделать чтобы одной дате соответствовал набор данных?

Google -> SQL AVG Group by

archeliteМне по сути нужно сделать вот что: в цикле вытаскивать из объекта значение поля data(18-фев-2016) и если следующее значение соответствует первому, то обнулять последующие пока не встретится новое значение, затем цикл повторяется.
Можете привести такой пример пожалуйста?
По сути есть такое понятие группировка. Вы вместо этого емкого понятия описывание то как лично вы решили делать группировку.
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216042
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот автору подарочек. Парсер. Юзкейсы гугли. Штука хорошая. Юзаю сам.

http://mvnrepository.com/artifact/org.apache.commons/commons-csv/1.2
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216066
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА вот автору подарочек. Парсер. Юзкейсы гугли. Штука хорошая. Юзаю сам.

http://mvnrepository.com/artifact/org.apache.commons/commons-csv/1.2
Уже два раза про него написал - бестолку. И афтару еще мавен придется освоить 8)

Вот даже пример как в стрим загнать
https://rumianom.pl/rumianom/entry/apache-commons-csv-with-java
А вот тут
http://www.oracle.com/technetwork/articles/java/architect-streams-pt2-2227132.html
про группировку и вычисление среднего. Осталось объединить и в CSVWriter зафигачить.

Но, у меня есть сильное подозрение, что афтара все равно не возьмут. Не те вопросы задает.
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216072
archelite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, будут разбираться :)
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216217
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяэто задача для бд
вставка из csv файла в базу - самая быстрая.
а вс остальное с данными база сделает оптимально и быстро.
если есть несколько типов логов - их по своим правилам вносить в базу, тут парсить не надо

Тормоза в этой задаче- диск, БД, сеть.
А парсинг только память жрёт (да, ненадолго, но жрёт)- куча String. А реализации- ещё и StringBuilder'ы создают пачками.
Так что лучше сделать однопоточный парсинг и впилить туда статический StringBuilder- это реально может съэкономить кучу времени.

PS: кстати, если кто-то знает csv парсер/райтер, который минимизирует создание лишних объектов (ценой строгой однопоточности) - скажите, будет полезно. А то приходится костыли писать, с вероятностью попасть на хитрый текст. Я даже String.split боюсь лишний раз дёргать.
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216221
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tominвадяэто задача для бд
вставка из csv файла в базу - самая быстрая.
а вс остальное с данными база сделает оптимально и быстро.
если есть несколько типов логов - их по своим правилам вносить в базу, тут парсить не надо

Тормоза в этой задаче- диск, БД, сеть.
А парсинг только память жрёт (да, ненадолго, но жрёт)- куча String. А реализации- ещё и StringBuilder'ы создают пачками.
Так что лучше сделать однопоточный парсинг и впилить туда статический StringBuilder- это реально может съэкономить кучу времени.

PS: кстати, если кто-то знает csv парсер/райтер, который минимизирует создание лишних объектов (ценой строгой однопоточности) - скажите, будет полезно. А то приходится костыли писать, с вероятностью попасть на хитрый текст. Я даже String.split боюсь лишний раз дёргать.
если так рассуждать — странно, как работают бд...
диск будет тормозом в случае, если у тебя десятки миллионов записей, а в этом случае java вылетит в out of memory намного раньше. либо придется писать модуль для свопа, что будет костылем. в базах существуют индексы, и пр. вещи для обработки данных, намного более заточенные для этого, чем будет написано на java. так что если не знаешь про базы - не надо грешить на диск..
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216235
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесли так рассуждать — странно, как работают бд...
диск будет тормозом в случае, если у тебя десятки миллионов записей, а в этом случае java вылетит в out of memory намного раньше. либо придется писать модуль для свопа, что будет костылем. в базах существуют индексы, и пр. вещи для обработки данных, намного более заточенные для этого, чем будет написано на java. так что если не знаешь про базы - не надо грешить на диск..

Нормально БД работают. Но это не отменяет того факта, что при полном чтении данных тормоз- диск и сеть (а задача автора- именно что полное чтение и неиндексированная запись).

Ещё раз- из цепочки "прочитать csv из файла" - "распарсить csv в набор данных", "записать в БД" тормозом может быть что угодно (сеть может затесаться как на 1м, так и на 3м пункте), но не парс.

Вот сейчас занимаюсь оптимизацие подобной задачи.
А то 1,5 Тб (gz, csv раз в 5-6 больше) парсились 14 часов- непорядок, понимаешь :)
И основное- это минимизировать работу с диском (работа была в несколько проходов).
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216247
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
занесение данных из файла csv в базу является самым быстрым и эффективным. в болишинстве баз есть специальные команды для этого. ничего парсить не надо
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216256
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

только афтару это не пригодится - у него нет такого условия исп-ть бд

я бы посмотрел в сторону Apache Commons CSV и не изобретал лисапет
остальное - дело логики
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216270
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
вот пример для mesql
http://www.mysql.ru/docs/man/LOAD_DATA.html


rema174 ,
вроде можно и с использованием 19057226

Alexey Tomin,
в java есть 11 способов чтения ....
выбери правильный https://habrahabr.ru/company/luxoft/blog/278233/

по поводу работы с базами vs методы на java
поиск в 10 000 000 записях при использовании поле like '%xxx%' and поле like '%ccc%' and...
mysql 5.7.11 - максимальное время 4.5 сек.
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216285
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tominвадяесли так рассуждать — странно, как работают бд...
диск будет тормозом в случае, если у тебя десятки миллионов записей, а в этом случае java вылетит в out of memory намного раньше. либо придется писать модуль для свопа, что будет костылем. в базах существуют индексы, и пр. вещи для обработки данных, намного более заточенные для этого, чем будет написано на java. так что если не знаешь про базы - не надо грешить на диск..

Нормально БД работают. Но это не отменяет того факта, что при полном чтении данных тормоз- диск и сеть (а задача автора- именно что полное чтение и неиндексированная запись).

Ещё раз- из цепочки "прочитать csv из файла" - "распарсить csv в набор данных", "записать в БД" тормозом может быть что угодно (сеть может затесаться как на 1м, так и на 3м пункте), но не парс.

Вот сейчас занимаюсь оптимизацие подобной задачи.
А то 1,5 Тб (gz, csv раз в 5-6 больше) парсились 14 часов- непорядок, понимаешь :)
И основное- это минимизировать работу с диском (работа была в несколько проходов).
8 Тб csv с распаковкой, парсингом и вставкой в бд за 14 часов - непорядок?! А за сколько вы хотели?
Просто распаковка из gz столько инфы сколько занимает? Часа 3 на сервере?
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216295
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

пропустил ) но я бы все равно делал так как понятнее
...
Рейтинг: 0 / 0
Многопоточный .csv парсер
    #39216298
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174вадя,

пропустил ) но я бы все равно делал так как понятнее
аргумент ваский ;)
мне с базой проще
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Многопоточный .csv парсер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]