Подходит ли Python для больших данных

14

В этом посте я прочитал, подходит ли язык R для больших данных, из которых состоят большие данные 5TB, и хотя он хорошо справляется с предоставлением информации о возможности работы с данными такого типа, Rон предоставляет очень мало информации Python. Мне было интересно, Pythonможно ли работать с таким большим количеством данных.

ragingSloth
источник

Ответы:

18

Чтобы уточнить, я чувствую, что исходные ссылки на вопросы от OP, вероятно, не являются лучшими для формата типа SO, но я, безусловно, буду представлять pythonв этом конкретном случае.

Позвольте мне начать с того, что независимо от размера ваших данных pythonне должно быть вашим ограничивающим фактором. На самом деле, есть только пара основных проблем, с которыми вы столкнетесь при работе с большими наборами данных:

  • Чтение данных в память. Это самая распространенная проблема в мире больших данных. По сути, вы не можете прочитать больше данных, чем у вас есть память (RAM). Лучший способ исправить это - выполнить атомарные операции с вашими данными, а не пытаться прочитать все сразу.
  • Хранение данных - это на самом деле просто еще одна форма более ранней проблемы, к тому моменту 1TB, когда вам нужно будет приступить к поиску, вам придется искать хранилище в другом месте. AWS S3 является наиболее распространенным ресурсом и pythonобладает фантастической botoбиблиотекой, облегчающей ведение больших фрагментов данных.
  • Задержка сети - перемещение данных между различными службами станет вашим узким местом. Вы можете сделать не так много, чтобы исправить это, кроме попыток выбрать совмещенные ресурсы и подключиться к стене.
Indico
источник
13

Есть несколько вещей, которые вы должны понимать при работе с большими данными -

Что такое большие данные?

Возможно, вам известны известные V больших данных - объем, скорость, разнообразие ... Итак, Python может не подходить для всех. И это идет со всеми доступными инструментами науки о данных. Вы должны знать, какой инструмент хорош для каких целей.

При работе с большим объемом данных:

  • Свинья / Улей / Акула - Очистка данных и работа ETL
  • Hadoop / Spark - распределенные параллельные вычисления
  • Mahout / ML-Lib - Машинное обучение

Теперь вы можете использовать R / Python на промежуточных этапах, но вы поймете, что они становятся узким местом во всем вашем процессе.

Если речь идет о скорости данных:

  • Кафка / Шторм - Высокопроизводительная система

Люди пытаются использовать R / Python здесь, но опять же, это зависит от желаемого вами типа параллелизма и сложности вашей модели.

Какой анализ вы хотите сделать?

Если ваша модель требует, чтобы все данные были сначала введены в память, то ваша модель не должна быть сложной, потому что, если промежуточные данные велики, код сломается. И если вы подумаете о том, чтобы записать его на диск, вы столкнетесь с дополнительной задержкой, потому что чтение / запись диска медленнее по сравнению с RAM.

Вывод

Вы определенно можете использовать Python в большом пространстве данных (определенно, поскольку люди пытаются использовать R, почему бы не Python), но сначала узнайте ваши данные и требования бизнеса. Могут быть лучшие инструменты, доступные для того же самого и всегда помните:

Ваши инструменты не должны определять, как вы отвечаете на вопросы. Ваши вопросы должны определить, какие инструменты вы используете.

Анкит
источник
8

В Python есть несколько очень хороших инструментов для работы с большими данными:

NumPy

Массивы, отображаемые в памяти Numpy, позволяют получить доступ к файлу, сохраненному на диске, как к массиву. В память должны быть загружены только те части массива, с которыми вы активно работаете. Он может использоваться почти так же, как обычный массив.

h5py и pytables

Эти две библиотеки обеспечивают доступ к файлам HDF5. Эти файлы позволяют получить доступ только к части данных. Кроме того, благодаря базовым библиотекам, используемым для доступа к данным, многие математические операции и другие манипуляции с данными могут выполняться без загрузки их в структуру данных Python. Возможны массивные, высоко структурированные файлы, намного больше, чем 5 ТБ. Это также позволяет бесшовное сжатие без потерь.

базы данных

Существуют различные типы баз данных, которые позволяют хранить большие наборы данных и загружать только те части, которые вам нужны. Многие базы данных позволяют вам выполнять манипуляции, не загружая данные вообще в структуру данных Python.

панд

Это обеспечивает высокоуровневый доступ к различным типам данных, включая данные HDF5, файлы CSV, базы данных и даже веб-сайты. Для больших данных он предоставляет оболочки для доступа к файлам HDF5, что упрощает анализ больших наборов данных.

mpi4py

Это инструмент для выполнения вашего кода Python распределенным образом на нескольких процессорах или даже на нескольких компьютерах. Это позволяет вам работать с частями ваших данных одновременно.

Даск

Он предоставляет версию обычного массива numpy, который поддерживает многие обычные операции numpy в многоядерном режиме, который может работать с данными, слишком большими для размещения в памяти.

полыхать

Инструмент, специально разработанный для больших данных. По сути, это оболочка для вышеуказанных библиотек, предоставляющая согласованные интерфейсы для различных методов хранения больших объемов данных (таких как HDF5 или базы данных) и инструменты, облегчающие манипулирование, выполнение математических операций и анализ данных, которые слишком велик, чтобы уместиться в память

Черная кошка
источник
4

Абсолютно. Когда вы работаете с данными такого масштаба, обычно используется инфраструктура больших данных, и в этом случае python или любой другой язык, который вы используете, является просто интерфейсом. Смотрите, например , Руководство по программированию Spark на Python . Какие у вас есть данные и что вы хотите с ними делать?

Эмре
источник
3

Чтобы обрабатывать такое количество данных, язык программирования - не главное, а основа программирования. Фреймворки, такие как MapReduce или Spark, имеют привязки ко многим языкам, включая Python. Эти платформы, безусловно, имеют много готовых пакетов для анализа данных. Но в конце концов все сводится к вашему требованию, т. Е. Какова ваша задача? Люди имеют разные определения задач анализа данных, некоторые из них могут быть легко решены с помощью реляционных баз данных. В этом случае SQL намного лучше, чем все другие альтернативы.

lgylym
источник
2

Я считаю, что сам язык не имеет ничего общего с возможностями производительности, когда речь идет о больших данных. Что имеет значение:

  • Насколько большие данные на самом деле
  • Какую обработку вы собираетесь выполнять на нем
  • Какое оборудование вы собираетесь использовать
  • Какие конкретные библиотеки вы планируете использовать

В любом случае, Python хорошо зарекомендовал себя в сообществах по науке о данных.

Mateva
источник
2

Я использовал Anaconda Python 3.4 и Pandas для поиска в базе данных строк 10M, чтобы соответствовать 20K учетных данных для входа. Занимает около минуты. Внутренние органы панд прекрасно используют память. При этом для действительно больших данных требуется архитектура обработки, соответствующая данной проблеме. Панды - это просто клей (логика) в этом уравнении, и другие инструменты могут сделать это также. R, Scala, Haskell, SAS и т. Д. Могут воспроизводить некоторую логику - возможно, достаточно, чтобы быстрее отвечать на вопросы. Но python делает хороший (лучший?) Универсальный инструмент. Вы можете запустить R-код в Python, а также в большинстве других языков. Несмотря на интерпретацию, существуют высокопроизводительные методы и инструменты, такие как pypy, которые могут заставить python работать почти так же быстро, как инструменты для тестирования, лишь с небольшим усилием. И в Python есть много библиотек, которые делают практически все - см. Список выше.

Если вы спрашиваете, следует ли вам изучать и использовать python, мой ответ - да. Статьи указывают, что python используется больше, чем R, среди людей, которые используют оба. Но мало проблем с наукой о данных решается одним инструментом. Это может стать вашим инструментом, но только это - инструмент. И точно так же, как ни один здравомыслящий человек не строит дом с помощью молотка, ни один здравомыслящий Data Scientist не использует только один инструмент.

Харви
источник
0

Забавно, как люди смешивают большие данные с наукой о данных и бизнес-аналитикой.

Во-первых, большие данные означают «много данных», так много информации, что они не помещаются в обычную базу данных. Однако иногда большие данные - это даже не правильная информация, а документы, изображения и так далее.

Итак, для обработки больших данных МЫ НУЖНЫ СКОРОСТЬ. Python вне лиги, поэтому R. Однако, если задача так же проста, как взять CSV и вставить в базу данных, то это ETL, нам не нужно программирование для этого.

А когда информация сокращается, тогда мы можем применить Python, R или все, что вы хотите. Даже Excel. Однако на этом этапе большие данные уже не являются большими, а являются обычными данными.

ИМХО, Java больше подходит для больших данных (для всей цепочки), но люди принимают Python по умолчанию по какой-то непрактичной причине.

Магеллана
источник