Ngôn ngữ R có phù hợp với Dữ liệu lớn không


48

R có nhiều thư viện nhằm mục đích Phân tích dữ liệu (ví dụ: JAGS, BUGS, ARULES, v.v.), và được đề cập trong các sách giáo khoa phổ biến như: J.Krusche, Phân tích dữ liệu Bayesian; B.Lantz, "Học máy với R".

Tôi đã thấy một hướng dẫn 5TB cho một tập dữ liệu được coi là Dữ liệu lớn.

Câu hỏi của tôi là: R có phù hợp với lượng Dữ liệu thường thấy trong các sự cố Dữ liệu lớn không? Có chiến lược nào được sử dụng khi sử dụng R với kích thước tập dữ liệu này không?


4
Ngoài các câu trả lời dưới đây, một điều cần nhớ là thực tế là hầu hết những điều bạn cần từ R liên quan đến Dữ liệu lớn có thể được thực hiện với các tập dữ liệu tóm tắt rất nhỏ so với nhật ký thô. Lấy mẫu từ nhật ký thô cũng cung cấp một cách liền mạch để sử dụng R để phân tích mà không phải đau đầu phân tích các dòng và dòng của nhật ký thô. Ví dụ, đối với một tác vụ lập mô hình phổ biến tại nơi làm việc, tôi thường xuyên sử dụng bản đồ thu nhỏ để tóm tắt 32 gbs nhật ký thô thành 28mbs dữ liệu người dùng để lập mô hình.
cwharland

Câu trả lời:


40

Trên thực tế điều này đang đến xung quanh. Trong cuốn sách R in a Nutshell thậm chí còn có một phần về việc sử dụng R với Hadoop để xử lý dữ liệu lớn. Có một số công việc xung quanh cần được thực hiện vì R thực hiện tất cả những gì nó hoạt động trong bộ nhớ, do đó về cơ bản bạn bị giới hạn về số lượng RAM bạn có sẵn cho bạn.

Một dự án trưởng thành cho R và Hadoop là RHadoop

RHadoop đã được chia thành một số tiểu dự án, rhdfs, rhbase, rmr2, plyrmr và quickcheck ( wiki ).


Nhưng việc sử dụng R với Hadoop có khắc phục được giới hạn này (phải thực hiện tính toán trong bộ nhớ) không?
Felipe Almeida

RHadoop đã khắc phục hạn chế này. Hướng dẫn ở đây: github.com/RevolutionAnalytics/rmr2/blob/master/docs/th đánh vần rõ ràng. Bạn cần chuyển sang một tư duy mapreduce, nhưng nó cung cấp sức mạnh của R cho môi trường hadoop.
Steve Kallestad

2
Hai lựa chọn thay thế mới đáng được đề cập là: SparkR databricks.com/blog/2015/06/09/ Khăn và h2o.ai h2o.ai/product đều phù hợp với dữ liệu lớn.
wacax

30

Vấn đề chính với việc sử dụng R cho các tập dữ liệu lớn là ràng buộc RAM. Lý do đằng sau việc giữ tất cả dữ liệu trong RAM là vì nó cung cấp truy cập và thao tác dữ liệu nhanh hơn nhiều so với việc lưu trữ trên ổ cứng. Nếu bạn sẵn sàng để có một hit trên hiệu suất, sau đó có, nó là khá thực tế để làm việc với các tập dữ liệu lớn trong R .

  • Gói RODBC: Cho phép kết nối với DB bên ngoài từ R để lấy và xử lý dữ liệu. Do đó, dữ liệu bị thao túng bị giới hạn trong RAM của bạn. Tập dữ liệu tổng thể có thể lớn hơn nhiều.
  • Gói ff cho phép sử dụng bộ dữ liệu RAM lớn hơn bằng cách sử dụng các trang được ánh xạ bộ nhớ.
  • BigLM: Nó xây dựng các mô hình tuyến tính tổng quát trên dữ liệu lớn. Nó tải dữ liệu vào bộ nhớ trong khối.
  • bigmemory: Gói R cho phép phân tích song song mạnh mẽ và hiệu quả bộ nhớ và khai thác dữ liệu của các tập dữ liệu lớn. Nó cho phép lưu trữ các đối tượng lớn (ma trận, v.v.) trong bộ nhớ (trên RAM) bằng cách sử dụng các đối tượng con trỏ bên ngoài để tham chiếu đến chúng.

1
Một gói khác được phân phốiR cho phép bạn làm việc với các tệp phân tán trong RAM.
adesantos

17

Một số câu trả lời tốt ở đây. Tôi muốn tham gia thảo luận bằng cách thêm ba lưu ý sau:

  1. Câu hỏi nhấn mạnh vào khối lượng dữ liệu trong khi đề cập đến Dữ liệu lớn chắc chắn là dễ hiểu và hợp lệ, đặc biệt là xem xét vấn đề tăng trưởng khối lượng dữ liệu vượt xa khả năng tăng trưởng theo cấp số nhân của công nghệ Moore ( http://en.wikipedia.org/wiki/Moore % 27s_law ).

  2. Phải nói rằng, điều quan trọng là phải nhớ về các khía cạnh khác của khái niệm dữ liệu lớn. Dựa trên định nghĩa của Gartner (nhấn mạnh của tôi - AB): " Dữ liệu lớnkhối lượng lớn , tốc độ cao và / hoặc tài sản thông tin đa dạng cao đòi hỏi các hình thức xử lý mới để cho phép ra quyết định nâng cao, khám phá cái nhìn sâu sắc và tối ưu hóa quy trình." (thường được gọi là " mô hình 3V "). Tôi đề cập đến điều này, bởi vì nó buộc các nhà khoa học dữ liệu và các nhà phân tích khác phải tìm kiếm và sử dụng các gói R tập trung vào các khía cạnh khác ngoài khối lượng của dữ liệu lớn (được kích hoạt bởi sự phong phú của hệ sinh thái R khổng lồ ).

  3. Mặc dù các câu trả lời hiện có đề cập đến một số gói R, liên quan đến dữ liệu lớn, để có phạm vi bao quát toàn diện hơn , tôi khuyên bạn nên tham khảo CRAN Nhiệm vụ "Tính toán cao và tính toán song song với R" ( http: //cran.r-project. org / web / Views / HighPerformanceComputing.html ), đặc biệt, các phần "Tính toán song song: Hadoop""Bộ nhớ lớn và dữ liệu hết bộ nhớ" .


12

R là tuyệt vời cho "dữ liệu lớn"! Tuy nhiên, bạn cần một quy trình làm việc vì R bị giới hạn (với một số đơn giản hóa) bởi dung lượng RAM trong hệ điều hành. Cách tiếp cận tôi thực hiện là tương tác với cơ sở dữ liệu quan hệ (xem phầnRSQLite gói để tạo và tương tác với SQLite), chạy các truy vấn kiểu SQL để hiểu cấu trúc của dữ liệu và sau đó trích xuất các tập hợp con cụ thể của dữ liệu để chuyên sâu tính toán Phân tích thống kê.

Tuy nhiên, đây chỉ là một cách tiếp cận: có các gói cho phép bạn tương tác với các cơ sở dữ liệu khác (ví dụ: Monet) hoặc chạy các phân tích trong R với ít giới hạn bộ nhớ hơn (ví dụ: xem pbdR).


9

Xem xét các tiêu chí khác, tôi nghĩ rằng trong một số trường hợp sử dụng Python có thể vượt trội hơn nhiều so với R cho Dữ liệu lớn. Tôi biết việc sử dụng R rộng rãi trong các tài liệu giáo dục khoa học dữ liệu và các thư viện phân tích dữ liệu tốt có sẵn cho nó, nhưng đôi khi nó chỉ phụ thuộc vào nhóm.

Theo kinh nghiệm của tôi, đối với những người đã quen thuộc với lập trình, sử dụng Python mang lại sự linh hoạt và tăng năng suất hơn nhiều so với ngôn ngữ như R, vốn không được thiết kế tốt và mạnh mẽ so với Python về ngôn ngữ lập trình. Như một bằng chứng, trong một khóa khai thác dữ liệu trong trường đại học của tôi, dự án cuối cùng tốt nhất đã được viết bằng Python, mặc dù những người khác có quyền truy cập vào thư viện phân tích dữ liệu phong phú của R. Đó là, đôi khi năng suất tổng thể (xem xét tài liệu học tập, tài liệu, v.v.) cho Python có thể tốt hơn R ngay cả khi thiếu các thư viện phân tích dữ liệu mục đích đặc biệt cho Python. Ngoài ra, có một số bài viết hay giải thích về tốc độ nhanh chóng của Python trong khoa học dữ liệu: Python dịch chuyển Rcấu trúc dữ liệu khoa học phong phú trong Python có thể sớm lấp đầy khoảng trống của các thư viện có sẵn cho R.

Một lý do quan trọng khác cho việc không sử dụng R là khi làm việc với các vấn đề về Dữ liệu lớn trong thế giới thực, trái với các vấn đề chỉ mang tính hàn lâm, cần rất nhiều công cụ và kỹ thuật khác, như phân tích dữ liệu, làm sạch, trực quan hóa, xóa web và nhiều vấn đề khác. dễ dàng hơn nhiều bằng cách sử dụng một ngôn ngữ lập trình mục đích chung. Đây có thể là lý do tại sao ngôn ngữ mặc định được sử dụng trong nhiều khóa học Hadoop (bao gồm cả khóa học trực tuyến của Udacity ) là Python.

Biên tập:

Gần đây, DARPA cũng đã đầu tư 3 triệu đô la để giúp tài trợ cho khả năng xử lý và hiển thị dữ liệu của Python cho các công việc dữ liệu lớn, đây rõ ràng là dấu hiệu của tương lai của Python trong Dữ liệu lớn. ( chi tiết )


3
R là một niềm vui để làm việc với thao tác dữ liệu ( reshape2, plyrvà bây giờ dplyr) và tôi không nghĩ bạn có thể làm tốt hơn ggplot2/ ggvisđể trực quan hóa
agave hữu cơ

@pearpies Như đã nói ở phần đầu câu trả lời của tôi, tôi thừa nhận các thư viện tốt có sẵn cho R, nhưng nói chung, khi xem xét tất cả các lĩnh vực cần thiết cho dữ liệu lớn (mà tôi đã nói trong một vài trong số chúng trong câu trả lời), R không có phù hợp với các thư viện trưởng thành và khổng lồ có sẵn cho Python.
Amir Ali Akbari


5
Câu trả lời này dường như hoàn toàn là giai thoại và hầu như không hiển thị ở bất cứ nơi nào mà R yếu so với Python.
stanekam

Ôi Chúa ơi! "Như một bằng chứng, trong một khóa học khai thác dữ liệu trong trường đại học của tôi, dự án cuối cùng tốt nhất đã được viết bằng Python, mặc dù những người khác có quyền truy cập vào thư viện phân tích dữ liệu phong phú của R." Và bạn muốn có độc giả tôn trọng phân tích của bạn? ồ Có thể có bất kỳ yếu tố nào khác liên quan đến dự án tốt nhất là một dự án python ngoài ngôn ngữ mà nó được viết không? thực sự ....
Shawn Mehan 5/12/2015

7

R là tuyệt vời cho rất nhiều phân tích. Như đã đề cập, có những điều chỉnh mới hơn cho dữ liệu lớn như MapR, RHadoop và các phiên bản có thể mở rộng của RStudio.

Tuy nhiên, nếu mối quan tâm của bạn là các thư viện, hãy chú ý đến Spark. Spark được tạo ra cho dữ liệu lớn và RẤT NHIỀU so với Hadoop một mình. Nó có các thư viện máy học, SQL, phát trực tuyến và đồ thị phát triển rộng lớn. Do đó, cho phép nhiều nếu không phải tất cả các phân tích được thực hiện trong khung (với nhiều API ngôn ngữ, tôi thích Scala) mà không phải xáo trộn giữa các ngôn ngữ / công cụ.


4

Như các câu trả lời khác đã lưu ý, R có thể được sử dụng cùng với Hadoop và các nền tảng điện toán phân tán khác để mở rộng nó đến mức "Dữ liệu lớn". Tuy nhiên, nếu bạn không kết hôn với R một cách cụ thể, nhưng sẵn sàng sử dụng môi trường "giống như R", Incanter là một dự án có thể hoạt động tốt cho bạn, vì nó có nguồn gốc từ JVM (dựa trên Clojure) và không 'Không có "sự không khớp trở kháng" giữa chính nó và Hadop mà R có. Điều đó có nghĩa là, từ Incanter, bạn có thể gọi API Hadoop / HDFS gốc Java mà không cần phải đi qua cầu nối JNI hoặc bất cứ điều gì.


2

Tôi ở xa một chuyên gia, nhưng sự hiểu biết của tôi về chủ đề này cho tôi biết rằng R (tuyệt vời trong thống kê) và vd: Python (tuyệt vời trong một số điều mà R thiếu) bổ sung cho nhau khá tốt (như đã chỉ ra bởi các bài viết trước) .


0

Tôi nghĩ rằng thực sự có rất nhiều công cụ để làm việc với dữ liệu lớn trong R. sparklyr sẽ là một người chơi tuyệt vời trong lĩnh vực đó. sparklyr là một giao diện R cho Apache Spark và cho phép kết nối với các cụm cục bộ và từ xa, cung cấp một back-end dplyr. Người ta cũng có thể dựa vào các thư viện máy học của Apache Spark. Hơn nữa, có thể xử lý song song với một số gói như rmpi và snow (do người dùng kiểm soát) hoặc doMC / foreach (dựa trên hệ thống).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.