Эффективное пересечение панелей данных с удаленным mongodb? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть локальный фрейм данных Python Pandas на моем локальном компьютере, и у меня есть доступ к удаленному серверу mongodb, у которого есть дополнительные данные, которые я могу запросить через pymongo.

Если мой локальный фрейм данных большой, скажем, 40k строк с3 столбца в каждой строке, какой самый эффективный способ проверить пересечение функций моего локального информационного кадра и удаленную коллекцию, содержащую миллионы документов?

Я ищу общие советы здесь.Я подумал, что мог бы просто взять отдельный список значений из каждой из 3 функций и использовать каждое из них в выражении $ или find, но если у меня есть 90k различных значений для одной из 3 функций, это кажется плохой идеей.

Так что любое мнение будет приветствоваться.У меня нет доступа для вставки локального фрейма данных на удаленный сервер, у меня есть только выбор / поиск доступа.

большое спасибо!

1 Ответ

0 голосов
/ 23 сентября 2018

Как вы уже объяснили, вы не сможете вставить данные.Так что единственное, что возможно, - это сначала перенести уникальные значения в список. df['column_name'].unique().Затем вы можете использовать оператор $in в методе .find() и передать свой список в качестве параметра.Если это занимает время или это слишком много.Затем разбейте ваш список на равные куски, я имею в виду список списка [[id1, id2, id3], [id4, id5, id6] ... ], сделайте цикл for for sub-list in list: db.xyz.find({'key':{'$in': sublist}}, {'_id': 1}) и используйте подсписок в качестве параметра в операторе $in.Затем для каждой итерации, если значение существует в БД, оно будет возвращать _id, и мы можем легко сохранить его в пустом списке и добавить его, и мы сможем получить все идентификаторы в таких случаях, когда значение существует вколлекция.

Так что я бы так и поступил.Не обязательно лучший из возможных.

...