Рубрики
Без рубрики

Использование MongoDB с пандами, Numpy и Arrow

TLDR: Сегодня Python Devteam в MongoDB взволнован (растоптанно!) Чтобы объявить бета -версию Pymon … Tagged с MongoDB, DataScience, Pandas, Python.

Tldr : Сегодня Python Devteam в MongoDB взволнован (растоптанно!) Чтобы объявить бета -версию Pimongoarrow , пакет PYPI, поддерживающий CPYTHON 3.6+. Этот релиз добавляет несколько новых API, которые будут интересны для разработчиков, которые используют рамки Numpy, Pandas или Apache Arrow, для анализа данных, хранящихся в MongoDB.

  • Просмотреть, внести свой вклад или разветвлять код
  • Прочитайте док

Как следует из названия, Pymongoarrow использует Apache Arrow, чтобы предложить быстрое и простое преобразование наборов результатов запросов MongoDB в несколько численных форматов данных, популярных среди разработчиков Python, включая Numpy Ndarrays и DataFrames Pandas.

В качестве эталонных пунктов для нашей реализации мы также рассмотрели Интеграция BigQuery’s Pandas , методы Pandas для обработки JSON/полуструктурированных данных, Разъем снежинки питона и Даск DataFrame Анкет

Pymongoarrow полагается на определенную пользовательскую схему данных, чтобы набор результатов запроса Marshall входит в табличную форму. Пользователи могут определить схему, создав восприятие Pymongoarrow.api. Схема Используя отображение имен полевых имен с характеристиками типа, например:

from pymongoarrow.api import Schema
schema = Schema({'_id': int, 'amount': float, 'last_updated': datetime})

Существует несколько допустимых типовых идентификаторов для каждого поддерживаемого типа BSON. Для полного списка поддерживаемых типов и связанных с ними идентификаторами типов см. Здесь Анкет

Вы можете установить Pymongoarrow на местной машине с помощью PIP: $ python -m pip установить Pymongoarrow

или использовать его с Mongodb Atlas :

$ python -m pip install pymongoarrow
$ python -m pip install "pymongo[srv]>=3.11,<4"

(Чтобы использовать Pimongoarrow с Mongodb Atlas ‘MongoDB+SRV://URIS пользователи должны установить Pimongo с дополнительным SRV в дополнение к установке Pimongoarrow).

Чтобы следовать примерам ниже, начните с добавления следующих тестовых данных в кластер MongoDB:

from datetime import datetime
from pymongo import MongoClient
client = MongoClient()
client.db.data.insert_many([
    {'_id': 1, 'amount': 21, 'last_updated': datetime(2020, 12, 10, 1, 3, 1)},
    {'_id': 2, 'amount': 16, 'last_updated': datetime(2020, 7, 23, 6, 7, 11)},
    {'_id': 3, 'amount': 3, 'last_updated': datetime(2021, 3, 10, 18, 43, 9)},
    {'_id': 4, 'amount': 0, 'last_updated': datetime(2021, 2, 25, 3, 50, 31)}])

Чтобы запустить операцию поиска для загрузки всех записей с ненулевой суммой в качестве:

Панды. DataFrame

df = client.db.data.find_pandas_all({'amount': {'$gt': 0}}, schema=schema)

Numpy.ndarray

ndarrays = client.db.data.find_numpy_all({'amount': {'$gt': 0}}, schema=schema)

В этом случае возвратное значение – это словарь, в котором ключи – это имена поля, а значения являются соответствующими массивами.

Пейрроу. Таблица

arrow_table = client.db.data.find_arrow_all({'amount': {'$gt': 0}}, schema=schema)

Разработчики, которые создают таблицу со стрелками, могут затем использовать некоторые другие возможности Arrow, например, сериализовать данные и отправлять их работникам (как в рабочем процессе DASK) или использовать API Pyarrow для написания запроса набора данных для Parquet Format, CSV или Многие другие пакеты PYPI, которые работают на форматированных данных. Например, чтобы написать таблицу, на которую ссылается переменная rourrow_table, в Parquet File example.parquet, вы запустите:

import pyarrow.parquet as pq
pq.write_table(arrow_table, 'example.parquet')

Другие пункты, примечание:

  • Первоначально мы намеревались построить новый API, который работал исключительно с Pandas, однако Pandas не предоставили стабильный C-API, который мы могли бы использовать. Между тем, мы вроде как влюбились в Apache Arrow Анкет Проект Apache Arrow имеет набор стандартов для устранения давней неэффективности при обработке и транспортировке крупных наборов данных в высокопроизводительных приложениях. Преобразование столов со стрелками в различные форматы было простым и быстрым. Поскольку Arrow является независимым от языком стандарта, наша интеграция Arrow облегчит разработчикам перемещение данных из MongoDB в широкий спектр систем OLAP.
  • В настоящее время мы распространяем только предварительно построенные двоичные файлы для архитектур x86_64, но мы планируем добавить больше. Пожалуйста, не стесняйтесь выразить свои предпочтения на GitHub!
  • Эта библиотека находится на ранних стадиях развития, и, возможно, API может измениться в будущем – мы определенно хотим продолжить его расширение.

Фото предоставлено: Шиян Сюй на Неспособный

Оригинал: “https://dev.to/techbelle/using-mongodb-with-pandas-numpy-and-arrow-3h5o”