大資料工具比較 R語言和Spark誰更勝一籌?

2021-07-23 05:33:38 字數 3862 閱讀 4022

摘要:本文有兩重目的,一是在效能方面快速對比下r語言和spark,二是想向大家介紹下 spark的機器學習庫 。 背景 介紹 由於r語言本身是單執行緒的,所以可能從效能方面對比spark和r並不是很明智的做法。即使這種比較不是很理想,但是對於那些曾經遇到過這些問題的人,下文中的一些數字一定會讓你很感興趣。

原文  

本文有兩重目的,一是在效能方面快速對比下r語言和spark,二是想向大家介紹下 spark的機器學習庫 。

背景介紹

由於r語言本身是單執行緒的,所以可能從效能方面對比spark和r並不是很明智的做法。即使這種比較不是很理想,但是對於那些曾經遇到過這些問題的人,下文中的一些數字一定會讓你很感興趣。

你是否曾把乙個機器學習的問題丟到r裡執行,然後等上好幾個小時?而僅僅是因為沒有可行的替代方式,你只能耐心地等。所以是時候去看看spark的機器學習了,它包含r語言大部分的功能,並且在資料轉換和效能上優於r語言。

曾經我嘗試過利用不同的機器學習技術——r語言和spark的機器學習,去解決同乙個特定的問題。為了增加可比性,我甚至讓它們執行在同樣的硬體環境和作業系統上。並且,在 spark中執行單機模式 ,不帶任何集群的配置。

在我們討論具體細節之前,關於revolution r 有個簡單的說明。作為r語言的企業版,revolution r試圖彌補r語言單執行緒的 缺陷。但它只能執行在像revolution analytics這樣的專有軟體上,所以可能不是理想的長期方案。如果想獲得微軟 revolution analytics軟體的擴充套件,又可能會讓事情變得更為複雜,比方說牽扯到許可證的問題。

因此,社群支援的開源工具,像是spark,可能成為比r語言企業版更好的選擇。

資料集和問題

分析採用的是kaggle** [譯者注 : kaggle是乙個資料分析的競賽平台,**: 上的數字識別器的資料集,其中包含灰度的手寫數字的,從0到9。

每張高28px,寬28px,大小為784px。每個畫素都包含關於畫素點明暗的值,值越高代表畫素點越暗。畫素值是0到255之間的整數,包括0和255。整張包含第一列在內共有785列資料,稱為「標記」,即使用者手寫的數字。

分析的目標是得到乙個可以從畫素數值中識別數字是幾的模型。

選擇這個資料集的論據是,從資料量上來看,實質上這算不上是乙個大資料的問題。

對比情況

針對這個問題,機器學習的步驟如下,以得出**模型結束:

主成分分析

、線性判別式分析

]。對所有雙位數字進行二元 邏輯回歸 ,並且根據它們的畫素資訊和主成分分析以及線性判別式分析得到的特徵變數進行分類。

在全量資料上執行 多元邏輯回歸 模型來進行多類分類。根據它們的畫素資訊和主成分分析以及線性判別式分析的特徵變數,利用樸素貝葉斯分類模型進行分類。利用決策樹分類模型來分類數字。

在上述步驟之前,我已經將標記的資料分成了訓練組和測試組,用於訓練模型和在精度上驗證模型的效能。

大部分的步驟都在r語言和spark上都執行了。詳細的對比情況如下,主要是對比了主成分分析、二元邏輯模型和樸素貝葉斯分類模型的部分。

主成分分析

主成分分析的主要計算複雜度在對成分的打分上,邏輯步驟如下:

在我們這個例子中,打分的結果是42000 x 784的維度矩陣與784 x 9的矩陣相乘。坦白說,這個計算過程在r中執行了超過4個小時,而同樣的運算spark只用了10秒多

矩陣相乘差不多是3億次運算或者指令,還有相當多的檢索和查詢操作,所以spark的平行計算引擎可以在10秒鐘完成還是非常令人驚訝的。

我通過檢視前9個主成分的方差,來驗證了所產生的主成分的精度。方差和通過r產生的前9個主成分的方差吻合。這一點確保了spark並沒有犧牲精度來換取效能和資料轉換上的優勢。

邏輯回歸模型

與主成分分析不同的是,在邏輯回歸模型中,訓練和打分的操作都是需要計算的,而且都是極其密集的運算。在這種模型的通用的資料訓練方案中包含一些對於整個資料集矩陣的轉置和逆運算。

由於計算的複雜性,r在訓練和打分都需要過好一會兒才能完成,準確的說是7個小時,而spark只用了大概5分鐘。

這裡我在45個從0到9的雙位數字上執行了二元邏輯回歸模型,打分/驗證也是在這45個測試資料上進行的。

我也並行執行了多元邏輯回歸模型,作為多類分類器,大概3分鐘就完成了。而這在r上執行不起來,所以我也沒辦法在資料上進行對比。

對於主成分分析,我採用 auc值

[譯者注 :  auc的值就是計算出roc曲線下面的面積,是 度量分類模型好壞的 乙個 標準 。 ]   來衡量**模型在45對資料上的表現,而spark和r兩者執行的模型結果的auc值差不多。

樸素貝葉斯分類器

與主成分分析和邏輯回歸不一樣的是,樸素貝葉斯分類器不是密集計算型的。其中需要計算類的先驗概率,然後基於可用的附加資料得到後驗概率。 [譯者注 :先驗概率是指根據以往經驗和分析得到的概率,它往往作為」由因求果」問題中的」因」出現的概率;後驗概率是指在得到"結果」的資訊後重新修正的概率,是"執果尋因」問題中的」果」。]

如上圖所示,r大概花了45餘秒完成,而spark只用了9秒鐘。像之前一樣,兩者的精確度旗鼓相當。

同時我也試著用spark機器學習執行了決策樹模型,大概花了20秒,而這個在r上完全執行不起來。

spark機器學習

入門指南

對比已經足夠,而這也成就了spark的機器學習。 最好是從程式設計指南開始學習它。不過,如果你想早點嘗試並從實踐中學習的話,你可能要痛苦一陣子才能將它執行起來吧。

為搞清楚示例**並且在資料集上進行試驗,你需要先去弄懂spark的rdd [譯[譯者注 :rdd , resilient distributed datasets , 彈性分布式資料集 ]  支援的基本框架和運算。然後也要弄明白spark中不同的機器學習程式,並且在上面進行程式設計。當你的第乙個spark機器學習的程式跑起來的時候,你可能就會意興闌珊了。

以下兩份資料可以幫你避免這些問題,同時理順學習的思路:

docker容器中已事先安裝apache hadoop,並且在偽分布式環境下執行。這可以將大容量檔案放進分布式檔案系統來測試spark。通過從分布式檔案系統載入記錄,可以很輕鬆地來建立rdd例項。

產能和精度

人們會使用不同的指標來衡量這些工具的好壞。對我來說,精準度和產能是決定性的因素。

大家總是喜歡r多過於spark機器學習,是因為經驗學習曲線。他們最終只能選擇在r上採用少量的樣本資料,是因為r在大資料量的樣本上花了太多時間,而這也影響了整個系統的效能。

對我來說,用少量的樣本資料是解決不了問題的,因為少量樣本根本代表不了整體(至少在大部分情況下是這樣)。所以說,如果你使用了少量樣本,就是在精度上選擇了妥協。

一旦你拋棄了少量樣本,就歸結到了生產效能的問題。機器學習的問題本質上就是迭代的問題。如果每次迭代都花費很久的話,那麼完工時間就會延長。可是,如果每次迭代只用一點時間的話,那麼留給你敲**的時間就會多一些了。

結論r語言包含了統計計算的庫和像 ggplot2 這樣視覺化分析的庫,所以它不可能被完全廢棄,而且它所帶來的挖掘資料和統計彙總的能力是毋庸置疑的。

但是,當遇到在大資料集上構建模型的問題時,我們應該去挖掘一些像spark ml的工具。spark也提供r的包, sparkr 可以在分布式資料集上應用r。

最好在你的「資料軍營」中多放點工具,因為你不知道在「打仗」的時候會遇到什麼。因此,是時候從過去的r時代邁入spark ml的新時代了。

原文:tools in the data armoury: r vs spark

大資料基礎 R語言

目錄 1.r語言是解釋性語言還是編譯性語言?2.簡述r語言的基本功能。3.r語言通常用在哪些領域?4.r語言常用的分類和 演算法有哪些?5.簡述如何利用r程式包進行資料分析 建模和資料 6.如何使用 聚類 和 分類 對資料樣本進行分組。7.sparkr dataframe的作用有哪些?8.簡述spa...

關於大資料和R語言

關於大資料和r語言 資料化分析 文 資料化分析 有一年多沒有更新博文了,主要是因為各種繁忙。儘管有很多看似合理的理由,但內心的聲音還是希望能夠堅持。之前看了幾本關於大資料的書,本來想分享一下自己讀後的心得體會,但是說實話,個人感覺書中大都是一些概念性的東西,並沒有從中獲得多少很有價值的營養,一般在實...

大資料R語言簡析

r語言是用於統計分析 畫圖的語言和操作環境。r是屬於gnu系統的乙個自由 免費 原始碼開放的軟體。它是乙個用於統計計算和統計製圖的優秀工具。r是統計領域廣泛使用的誕生於1980年左右的s語言的乙個分支。能夠覺得r是s語言的一種實現。而s語言是由at t貝爾實驗室開發的一種用來進行資料探索 統計分析和...