Подходит ли язык R для больших данных
Вопрос
R имеет много библиотек, которые направлены на анализ данных (например, Jags, Bugs, Arules и т. Д.), И упоминается в популярных учебниках, таких как: J.Krusche, анализ байесовских данных; Б.Ланц, "Машинное обучение с R".
Я видел руководство в 5 ТБ для набора данных, который должен рассматриваться как большие данные.
Мой вопрос: подходит ли R для количества данных, обычно встречающихся в проблемах больших данных? Существуют ли стратегии, которые необходимо использовать при использовании R с таким размером набора данных?
Решение
На самом деле это происходит. В книге r в двух словах есть даже раздел об использовании R с Hadoop для обработки больших данных. Есть некоторые работы вокруг, которые необходимо проделать, потому что R выполняет всю свою работу в памяти, поэтому вы в основном ограничены количеством оперативной памяти, которая у вас есть.
Зрелый проект для R и Hadoop Rhadoop
Rhadoop был разделен на несколько субпроектов, RHDFS, RHBASE, RMR2, PLYRMR и QuickCheck (вики).
Другие советы
Основной проблемой с использованием R для больших наборов данных является ограничение оперативной памяти. Причина хранения всех данных в ОЗУ заключается в том, что он обеспечивает гораздо более быстрый доступ и манипуляции с данными, чем хранение на HDD. Если вы готовы получить удар по производительности, то да, это довольно практично работать с Большие наборы данных в R.
- Пакет RODBC: позволяет подключаться к внешнему БД из R, чтобы получить и обрабатывать данные. Следовательно, данные манипулируется ограничено вашей оперативной памятью. Общий набор данных может стать намного больше.
- Пакет FF позволяет использовать наборы данных больше, чем RAM, используя страницы отображения памяти.
- BIGLM: Он создает обобщенные линейные модели на больших данных. Он загружает данные в память в куски.
- BigMemory: пакет R, который позволяет мощный и экономичный параллельный анализ и интеллектуальный анализ данных массивных наборов данных. Это позволяет хранить большие объекты (матрицы и т. Д.) В памяти (на ОЗУ), используя объекты внешнего указателя для их обозначения.
Некоторые хорошие ответы здесь. Я хотел бы присоединиться к обсуждению, добавив следующие три заметки:
Акцент вопроса на Объем данных При ссылке на Большие данные безусловно, понятен и действителен, особенно с учетом проблема роста объема данных опережая экспоненциальный рост технологических возможностей на Закон Мура (http://en.wikipedia.org/wiki/moore%27s_law).
Сказав это, важно помнить о других аспектах концепции больших данных. На основе ГартнерОпределение (акцент mine - ab): "Большие данные в приоритете объем, высокая скорость, и/или высокий разнообразие Информационные активы, которые требуют новых форм обработки, чтобы обеспечить улучшение принятия решений, обнаружение понимания и оптимизацию процессов »(обычно называется«Модель 3VS") Я упоминаю об этом, потому что это заставляет ученых данных и других аналитиков искать и использовать пакеты R, которые фокусируются на кроме тома аспекты больших данных (включены богатство огромного R экосистема).
В то время как существующие ответы упоминают некоторые пакеты R, связанные с большими данными, для более Комплексное покрытие, Я бы порекомендовал обратиться к Взгляд задачи CRAN "Высокопроизводительные и параллельные вычисления с R" (http://cran.r-project.org/web/views/highperformancecomputing.html), в частности, разделы "Параллельные вычисления: Hadoop" а также "Большая память и данные вне памяти".
R отлично подходит для "больших данных"! Тем не менее, вам нужен рабочий процесс, так как R ограничен (с некоторым упрощением) количеством оперативной памяти в операционной системе. Подход, который я использую, заключается в взаимодействии с реляционной базой данных (см. RSQLite
Пакет для создания и взаимодействия с помощью Databse SQLite) запустите запросы в стиле SQL, чтобы понять структуру данных, а затем извлечь определенные подмножества данных для вычисления статистического анализа.
Однако это только один подход: есть пакеты, которые позволяют вам взаимодействовать с другими базами данных (например, MONET) или анализом запуска в R с меньшими ограничениями памяти (например, см. pbdR
).
Учитывая еще один критерий, я думаю, что в некоторых случаях использование Python может быть намного превосходить R для больших данных. Я знаю широко распространенное использование R в образовательных материалах Data Science и доступных для него библиотеках анализа данных, но иногда это только зависит от команды.
По моему опыту, для людей, уже знакомых с программированием, использование Python обеспечивает гораздо большую гибкость и повышение производительности по сравнению с таким языком, как R, который не так хорошо разработан и мощный по сравнению с Python с точки зрения языка программирования. В качестве доказательства, в курсе анализа данных в моем университете, лучший окончательный проект был написан в Python, хотя другие имеют доступ к богатой библиотеке анализа данных R. То есть иногда общая производительность (учитывая учебные материалы, документацию и т. Д.) Для Python может быть лучше, чем R, даже в отсутствии библиотек анализа данных специального назначения для Python. Кроме того, есть несколько хороших статей, объясняющих быстрые темпы питона в науке о данных: Python вытесняет r а также Богатые научные структуры данных в Python Это может вскоре заполнить разрыв доступных библиотек для Р.
Другая важная причина не использования R - это работа с проблемами с большими данными реального мира, вопреки только академическим проблемам, существует много необходимости для других инструментов и методов, таких как анализ данных, очистка, визуализация, сеть и многие другие, которые намного проще использовать язык программирования общего назначения. Возможно, именно поэтому язык по умолчанию используется во многих курсах Hadoop (включая Udacity's онлайн курс) это питон.
Редактировать:
Недавно DARPA также инвестировала 3 миллиона долларов, чтобы помочь финансировать возможности обработки и визуализации данных Python для рабочих мест с большими данными, что явно является признаком будущего Python в больших данных. (Детали)
R отлично подходит для большого анализа. Как упоминалось, существуют новые адаптации для больших данных, таких как MAPR, Rhadoop и масштабируемые версии RStudio.
Однако, если вы озаботите библиотеки, следите за искра. Spark была создана для больших данных и намного быстрее, чем Hadoop. Он имеет значительно растущее машинное обучение, SQL, потоковую передачу и графические библиотеки. Таким образом, позволяя многое, если не весь анализ, должен быть проведен в рамках (с несколькими языковыми API, я предпочитаю Scala) без необходимости перетасовать между языками/инструментами.
Как отмечались другие ответы, R может использоваться вместе с Hadoop и другими распределенными вычислительными платформами для масштабирования его до уровня «больших данных». Однако, если вы не приговорены к R конкретно, но готовы использовать «R-подобную» среду, Инсантер это проект, который может хорошо работать для вас, так как он является родным для JVM (на основе Clojure) и не имеет «несоответствия импеданса» между собой и Hadop, который имеет R. То есть, из инсанта, вы можете вызвать API -интерфейсы уроженцев Java Hadoop / HDFS, не проходившего через мост JNI или что -то в этом роде.
Я далеко от эксперта, но мое понимание предмета говорит мне, что R (превосходно по статистике) и, например, Python (превосходно в нескольких из тех вещей, где R не хватает) довольно хорошо дополняют друг друга (как указывается предыдущими посты) Анкет
Я думаю, что на самом деле существует множество инструментов для работы с большими данными в R. Sparklyr, будет отличным игроком в этой области. Sparklyr-это интерфейс R для Apache Spark и позволяет соединяться с локальными и удаленными кластерами, обеспечивая конец DPLYR. Можно также полагаться на библиотеки машинного обучения Apache Spark. Кроме того, параллельная обработка возможна с несколькими пакетами, такими как RMPI и снег (контролируемый пользователем) или DOMC/Foreach (система на основе).