Подходит ли язык R для больших данных

48

R имеет много библиотек, которые предназначены для анализа данных (например, JAGS, BUGS, ARULES и т. Д.), И упоминается в популярных учебниках, таких как: J. Krusche, Doing Bayesian Data Analysis; Б.Ланц, "Машинное обучение с R".

Я видел рекомендацию в 5 ТБ для набора данных, который следует рассматривать как большие данные.

Мой вопрос: подходит ли R для того объема данных, который обычно встречается в проблемах с большими данными? Есть ли стратегии, которые следует использовать при использовании R с таким размером набора данных?

akellyirl
источник
4
В дополнение к ответам, приведенным ниже, следует помнить, что большинство вещей, которые вам нужны от R в отношении больших данных, можно выполнить с помощью наборов сводных данных, которые очень малы по сравнению с необработанными журналами. Выборка из необработанного журнала также обеспечивает плавный способ использования R для анализа без головной боли при разборе строк и строк необработанного журнала. Например, для обычной задачи моделирования на работе я обычно использую map Reduce для суммирования 32 ГБ необработанных журналов до 28 МБ пользовательских данных для моделирования.
cwharland

Ответы:

40

На самом деле это происходит вокруг. В книге R в двух словах даже есть раздел об использовании R с Hadoop для обработки больших данных. Есть некоторые обходные пути, которые необходимо выполнить, потому что R выполняет всю свою работу в памяти, поэтому вы в основном ограничены объемом доступной вам оперативной памяти.

Зрелым проектом для R и Hadoop является RHadoop

RHadoop был разделен на несколько подпроектов: rhdfs, rhbase, rmr2, plyrmr и quickcheck ( wiki ).

MCP_infiltrator
источник
Но преодолевает ли это ограничение использование R с Hadoop (приходится выполнять вычисления в памяти)?
Фелипе Алмейда
RHadoop действительно преодолевает это ограничение. Учебник здесь: github.com/RevolutionAnalytics/rmr2/blob/master/docs/… четко изложен . Вам нужно перейти к образу мышления, уменьшающему map, но он действительно обеспечивает мощность R для среды hadoop.
Стив Каллестад
2
Стоит упомянуть две новые альтернативы: SparkR databricks.com/blog/2015/06/09/… и h2o.ai h2o.ai/product, которые хорошо подходят для больших данных.
Wacax
30

Основной проблемой при использовании R для больших наборов данных является ограничение ОЗУ. Причина сохранения всех данных в оперативной памяти заключается в том, что они обеспечивают гораздо более быстрый доступ и манипулирование данными, чем при хранении на жестких дисках. Если вы готовы принять удар по производительности, то да, это довольно практично работать с большими наборами данных в R .

  • Пакет RODBC: позволяет подключаться к внешней БД из R для извлечения и обработки данных. Следовательно, обрабатываемые данные ограничены вашей оперативной памятью. Общий набор данных может пойти намного больше.
  • Пакет ff позволяет использовать наборы данных, превышающие объем ОЗУ, используя отображенные в памяти страницы.
  • BigLM: Он строит обобщенные линейные модели на больших данных. Он загружает данные в память кусками.
  • bigmemory: пакет R, который позволяет проводить мощный параллельный анализ с эффективным использованием памяти и анализировать массивные массивы данных. Это позволяет хранить большие объекты (матрицы и т. Д.) В памяти (в оперативной памяти), используя внешние указатели для обращения к ним.
asheeshr
источник
1
Еще один пакет - DistributionR, который позволяет работать с распределенными файлами в оперативной памяти.
adesantos
17

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

  1. Акцент в вопросе об объеме данных при обращении к « Большим данным» , безусловно, понятен и обоснован, особенно если учесть проблему роста объема данных, опережающую экспоненциальный рост технологических возможностей в соответствии с Законом Мура ( http://en.wikipedia.org/wiki/Moore % 27s_law ).

  2. Сказав это, важно помнить о других аспектах концепции больших данных. Основано на определении Gartner (выделено мое - AB): « Большие данные - это информационные ресурсы большого объема , высокой скорости и / или большого разнообразия, которые требуют новых форм обработки для обеспечения улучшенного принятия решений, обнаружения и оптимизации процессов». (обычно упоминается как " модель 3Vs "). Я упоминаю об этом, потому что это заставляет исследователей данных и других аналитиков искать и использовать пакеты R, которые фокусируются не только на объемных аспектах больших данных (что обеспечивается богатством огромной экосистемы R ).

  3. Хотя в существующих ответах упоминаются некоторые пакеты R, связанные с большими данными, для более полного охвата , я бы рекомендовал обратиться к представлению задач CRAN «Высокопроизводительные и параллельные вычисления с R» ( http: //cran.r-project. org / web / views / HighPerformanceComputing.html ), в частности, разделы «Параллельные вычисления: Hadoop» и «Большие объемы памяти и нехватка памяти» .

Александр Блех
источник
12

R отлично подходит для "больших данных"! Однако вам необходим рабочий процесс, поскольку R ограничено (с некоторым упрощением) объемом оперативной памяти в операционной системе. Подход, который я RSQLiteвыбрал, заключается во взаимодействии с реляционной базой данных (см. Пакет для создания и взаимодействия с базой данных SQLite), выполнении запросов в стиле SQL, чтобы понять структуру данных, а затем извлекать определенные подмножества данных для вычислительно интенсивной работы. статистический анализ.

Однако это всего лишь один из подходов: существуют пакеты, которые позволяют вам взаимодействовать с другими базами данных (например, Monet) или выполнять анализ в R с меньшими ограничениями памяти (например, см. pbdR).

statsRus
источник
9

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

По моему опыту, для людей, уже знакомых с программированием, использование Python обеспечивает гораздо большую гибкость и повышение производительности по сравнению с таким языком, как R, который не так хорошо разработан и мощен по сравнению с Python с точки зрения языка программирования. Как доказательство, на курсе по интеллектуальному анализу данных в моем университете лучший финальный проект был написан на Python, хотя у остальных есть доступ к богатой библиотеке анализа данных R. То есть иногда общая производительность (с учетом учебных материалов, документации и т. Д.) Для Python может быть выше, чем у R, даже при отсутствии специализированных библиотек анализа данных для Python. Кроме того, есть несколько хороших статей, объясняющих быстрые темпы Python в науке о данных: Python Displacing R и Rich Scientific Data Structures в Python что может вскоре заполнить пробел в доступных библиотеках для R.

Другая важная причина, по которой не используется R, заключается в том, что при работе с реальными проблемами больших данных, вопреки академическим проблемам, существует большая потребность в других инструментах и ​​методах, таких как анализ данных, очистка, визуализация, удаление из Интернета и многие другие, которые гораздо проще, используя язык программирования общего назначения. Это может быть причиной того, что языком по умолчанию, используемым во многих курсах Hadoop (включая онлайн-курс Udacity ), является Python.

Редактировать:

Недавно DARPA также инвестировала 3 миллиона долларов, чтобы помочь финансировать возможности обработки и визуализации данных Python для работы с большими данными, что является явным признаком будущего Python в области больших данных. ( подробности )

Амир Али Акбари
источник
3
С R приятно работать с данными ( reshape2, plyrи сейчас dplyr), и я не думаю, что вы можете сделать лучше, чем ggplot2/ ggvisдля визуализации
органическая агава
@pearpies Как уже было сказано в начале моего ответа, я допускаю хорошие библиотеки, доступные для R, но в целом при рассмотрении всех областей, необходимых для больших данных (о чем я сказал несколько из них в ответе), R - нет матч для зрелых и огромных библиотек, доступных для Python.
Амир Али Акбари
5
Этот ответ кажется совершенно анекдотичным и вряд ли показывает где-нибудь, где R слаб по сравнению с Python.
stanekam
О, Боже мой! «Как доказательство, на курсе по интеллектуальному анализу данных в моем университете лучший финальный проект был написан на Python, хотя у других есть доступ к богатой библиотеке анализа данных R». И вы хотите, чтобы читатели уважали ваш анализ? Ух ты. Могут ли быть какие-то другие факторы, связанные с лучшим проектом, являющимся проектом на python, отличным от языка, на котором он был написан? действительно ....
Шон Механ
7

R отлично подходит для большого анализа. Как уже упоминалось, есть новые адаптации для больших данных, такие как MapR, RHadoop и масштабируемые версии RStudio.

Однако, если вас интересуют библиотеки, следите за Spark. Spark был создан для больших данных и НАМНОГО быстрее, чем один Hadoop. Он имеет значительно растущие библиотеки машинного обучения, SQL, потоковой передачи и графов. Таким образом, позволяя выполнять, если не весь анализ, в рамках фреймворка (с многоязычными API, я предпочитаю Scala) без необходимости перемещаться между языками / инструментами.

Climbs_lika_Spyder
источник
4

Как отмечалось в других ответах, R можно использовать вместе с Hadoop и другими распределенными вычислительными платформами для масштабирования до уровня «больших данных». Однако, если вы не привязаны к R специально, но хотите использовать «R-подобную» среду, Incanter - это проект, который может хорошо работать для вас, поскольку он является родным для JVM (на основе Clojure) и не не имеет "несоответствия импеданса" между собой и Hadop, которое имеет R То есть из Incanter вы можете вызывать нативные API Java Hadoop / HDFS без необходимости проходить через мост JNI или что-то еще.

Mindcrime
источник
2

Я далеко не эксперт, но мое понимание предмета говорит мне, что R (превосходный в статистике) и, например, Python (превосходный в некоторых из тех вещей, где R отсутствует) довольно хорошо дополняют друг друга (как указывалось в предыдущих постах) ,

Stenemo
источник
0

Я думаю, что на самом деле существует множество инструментов для работы с большими данными в R. sparklyr будет отличным игроком в этой области. sparklyr - это интерфейс R к Apache Spark, который позволяет подключаться к локальным и удаленным кластерам, предоставляя серверную часть dplyr. Можно также полагаться на библиотеки машинного обучения Apache Spark. Кроме того, параллельная обработка возможна с несколькими пакетами, такими как rmpi и snow (контролируемые пользователем) или doMC / foreach (на основе системы).

paoloeusebi
источник