@proelixir

Страница 284 из 1045
Taras ?
15.01.2017
21:03:34
нет, в произвольном порядке

Dmitry
15.01.2017
21:04:34
Впринципе влазит в оперативку 2 файлы или нет?

Taras ?
15.01.2017
21:04:40
не понимаю где я туплю — файлы весят по 155Мб, а оперативки у меня бим-ом кушается 1.5Гб++ пока не упадет...

Dmitry
15.01.2017
21:05:18
Мне кажется для этой задачи эликсир не нужен

Google
Dmitry
15.01.2017
21:05:52
Scipy раскатает за минуту такое

Taras ?
15.01.2017
21:05:55
да можно и на php, вопрос в другом — где я туплю используя erlang/elixir ?

падает когда прошло около 3тис строк

проблема мои кривых рук, не языка, верно? что я делаю не так?

Dmitry
15.01.2017
21:08:13
Эта задача рекурсией никак не решается

Alexander
15.01.2017
21:09:38
зачем строки разбивать на составляющие, если можно целиком строки сравнивать?

Taras ?
15.01.2017
21:10:17
зачем строки разбивать на составляющие, если можно целиком строки сравнивать?
нельзя это названия городов — в одном файле русский, в другом - инглиш поэтому сравнения только айдишек

Alexander
15.01.2017
21:10:40
Загнать первый файл целиком построчно(поайдишно) в ets и поудалять из ets строки, которые встретятся во втором файле

Taras ?
15.01.2017
21:11:26
Эта задача рекурсией никак не решается
перед этим я делал так - https://gist.github.com/221V/f10c1d5beddc92c5e593cd4e412d77c9 падало на 2тис строк сейчас вот я сделал открытие 2го файла сразу — теперь падает на 3 тис строк — уже оптимизация, прогресс

Dmitry
15.01.2017
21:12:21
Можно даж не в ets

Taras ?
15.01.2017
21:12:28
Я б так и делал
как думаете — загнать в списки — тоже бесполезно будет?

Google
Dmitry
15.01.2017
21:12:48
Список медленный теоретически

Alexander
15.01.2017
21:12:56
резутльтат - объединение остатков ets и ненайденых строк из второго файла

Dmitry
15.01.2017
21:12:58
Но по памяти скорее всего не упадёт

Taras ?
15.01.2017
21:14:53
? мне на локалке "в 1 юзера", это не на сервере) сейчас попробую а потом и с ets наверное - еще не работал с ними?

Dima
15.01.2017
21:34:33
https://www.youtube.com/watch?v=KPNSHvgROzc

Alexander
15.01.2017
21:39:37
Если ищем разницу только в city_id, то можно из файлов построить упорядоченные списки и вычесть один из другого и наоборот. http://erlang.org/doc/man/ordsets.html#subtract-2

anton
15.01.2017
22:13:23
а айдишники какие? гуиды?

Taras ?
15.01.2017
22:33:23
а айдишники какие? гуиды?
что такое "гуиды" ? не знаю такого просто integer (тут правда как строка читается)

Alexander
15.01.2017
22:43:03
https://gist.github.com/onokhov/f65c179b98dcf480d0472d489241b8f0

Alexander
15.01.2017
22:49:32
> в одном файле русский, в другом - инглиш

там не строки сравнивать надо

anton
15.01.2017
22:55:51
ну задачу можно по разному решать, оптимизируя по памяти, IO и cpu если речь о том, когда оба массива данных (из файлов) не помещяются в памяти, то можно следующим способом: перезаписываем файлы, отсортировав по id (это ведь int, значит можно сортировать по возрастанию например) далее читаем каждый файл построчно, последовательно если A == B - идем дальше если A > B, то берем следующее значение из B и сравниваем с А, записав В куда-то в файл С (ну или вывести куда-то, ведь нас различие интересует)

ой

Alexander
15.01.2017
22:59:29
файлы по 150мегов, из которых нужны не строки, а только одна колонка в каждой строке. Конечно всё поместится в память

anton
15.01.2017
23:01:51
ну тогда считать из каждого файла по нужной колонке из каждой строки в два массива (для каждого файла по массиву) а потом что-то вроде [1, 2, 3] — [1, 3] iex> [1, 2, 3] — [1, 3] [2]

ну через ETS

а redbeard покинул нас однако :(

Dmitry
15.01.2017
23:07:19
Хрень какая то. Почему нужно решать проблему через жопу? Import pandas as pd Pd.from_csv(file1) Pd.from_csv(file2) pd.merge(df2, df1, how='left') Конец

Google
Dmitry
15.01.2017
23:07:41
4 строчки в питоне - нет, ща будем мутить алгоритмы в эликсире

anton
15.01.2017
23:08:11
и ему иммутабельные листы мешают ;)

Александр
15.01.2017
23:08:58
там множества есть в эрланге

пусть все айдишники загрузит и так же вычтет

Хрень какая то. Почему нужно решать проблему через жопу? Import pandas as pd Pd.from_csv(file1) Pd.from_csv(file2) pd.merge(df2, df1, how='left') Конец
задача то найти каких строк не хватает в обоих множествах, так что и на питоне кода побольше будет (конечно же меньше чем на эрланге или эликсире), хотя посмотрел доку к pandas - мощный инструмент, однако

Dmitry
15.01.2017
23:26:40
Я в общем то не против алгоритмов как таковых, просто тут как в анекдоте "шашечки или ехать". Вся фишка data science на питоне в том, что он сделан, отлажен, есть мощные доки и можно решить проблему.

Ну и конечно сделан на C)

anton
15.01.2017
23:40:55
ну если про питон и про решение задачи в лоб, то найти именно различие между двумя массивами можно в одну строку уложить :) diff = [item for item in temp1 if item not in temp2] пандовый merge с how='left' немного не то

Alexander
16.01.2017
01:05:19
4 строчки в питоне - нет, ща будем мутить алгоритмы в эликсире
я это знакомым эликсироводам раз 100 говорил, решать задачи нужно подходящими инструментами

Taras ?
16.01.2017
01:26:39
я мог сделать это с помощью php или js (phantom.js) хотелось сделать именно на erlang/elixir — научиться еще чему-то новому — расширение кругозора, мосговый штурм... благодарямс всем за помощь! приятно осознавать что день не зря прошел и что-то новое сделано и понято ?

Taras ?
16.01.2017
01:29:02
там то же самое можно сделать — считать с файла по-строчно, сравнить...

кстати самое простое решение — импортировать данные в базу, и поиск-сравнение уже силами самой субд сделать — с кода просто запросы в цыкле накидать и все)

Alexander
16.01.2017
01:33:44
я честно не стал бы даже жопу морщить программированием

grep -v -F -x -f file1 file2

Google
Alexander
16.01.2017
01:35:45
у нас в проекте импорты из файлов по 600мб, все жмем зипом и из рубей греп запускаем через пайп к зипу

чтобы даже не использовать место под хранение

Taras ?
16.01.2017
01:36:19
grep -v -F -x -f file1 file2
? для меня это пока неизвестная магия))

Alexander
16.01.2017
01:36:43
это сравнние 2х файлов и вывод разницы в консоль

работает как пулемет, если особенно ripgrep

можешь прямо из эликсира запускать и просто аутпут забирать

он чистый, прямо твои строки

Taras ?
16.01.2017
01:41:48
? запишу в файлик на будущее)

Admin
ERROR: S client not available

Vladimir
16.01.2017
03:33:35
+1 за греп. Erlang ports не зря придумали.

Каждой задаче свой инструмент.

Rafkat
16.01.2017
04:37:50
Был же прикол, чувак для обработки csv заюзал шелл скрипты вместо хадуп, Мап редьюсер и тд,икоторые были в проекте

Alexander
16.01.2017
04:47:31
я юзаю шелскрипты для первичной обработки csv

чтобы фиксить всякие переносы, кривые разделители

т.е язык программирование 100 раз упадет на ошибках либы, которая парсит csv

grep + sed + awk

Rustam
16.01.2017
04:49:58
grep + sed + awk
сисадминам нахер не нужно программирование, потому что есть шелл))

Alexander
16.01.2017
04:50:28
дело в том, чтобы загнать еще в хадуп данные, нужно их нормализировать, если есть опасение, что они кривые

хадупы-хуюпы

у нас импортеры падали по несколько раз в день, т.к каждый шлет свой csv, где ошибки от кривых либ идут. Где-то джавой делали, там внезапно по паре переносов строк. Еще одни кренделя какой-то индусской либой для c# воспользовались и там святой рандом откусывал разделители

Google
Alexander
16.01.2017
04:53:25
чтобы не патчить по 100 раз импортеры, просто данные до этого еще прогоняем и исправляем из шелскрипта

накипело

надеюсь никого не обидел )

Alexander
16.01.2017
06:53:41
grep -v -F -x -f file1 file2
греп не годится. Медленно очень будет

перл ок perl -lnE '$f //= $ARGV; $ARGV eq $f ? $h{$_}++ : (exists $h{$_} or say)' cities2.txt cities1.txt

Alexander
16.01.2017
07:06:25
Alexander
16.01.2017
07:07:30
для конкретно этой задачи медленнее.

понятно ли почему?

Marat
16.01.2017
07:25:45
Alexander
16.01.2017
07:47:25
понятно ли почему?
Мои познания грепа не такие большие

Alexander
16.01.2017
08:28:23
потому что сложность grep -v -F -x -f file1 file2 O(n*m), где n - число строк в первом файле, m - во втором. Для каждой строки из одного файла мы пробегаемся по всем строкам другого. Кроме того, греп ищет вхождение подстроки, что медленнее простого сравнения Для решения на перле сложность O(n+m) - на больших n и m разница по скорости будет огромна

Константин
16.01.2017
08:30:08
если сравнение только по id - то я думаю о сортировке

Dmitry
16.01.2017
08:33:31
Всю жизнь мечтал понимать О нотацию, потому что учился на тракториста и там такому не учат. Короче спецом закончил курс на степике - теперь довольный как слон)

anton
16.01.2017
08:35:07
пишу с таксофона вам. но разве задача найти каких значений из файла В нет в файле А? вроде нужно найти те, которые есть в А, но нет в В и нет в А, но есть в В. для [1,2,3,5] и [6,2,8,1] надо вернуть [3,5,6,8]?

Alexander
16.01.2017
08:36:20
да, и грепом это надо было бы делать в два захода

Константин
16.01.2017
08:37:02
тут только отсортировать и построчно сравнивать

Alexander
16.01.2017
08:37:30
и не просто список разницы нужен, а два списка, что есть своего в каждом файле

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

anton
16.01.2017
08:45:00
а эти города и их айдишники не из базы взяты? может их можно сравнить там? откуда файл пришел? :)

abc
16.01.2017
10:51:15
4 строчки в питоне - нет, ща будем мутить алгоритмы в эликсире
вот поддерживаю. одним языком не стоит себя ограничивать. питоновские штуки для data science офигеть какие производительные.

Страница 284 из 1045