HDInsight上的 R Server 提供各種計算環境(如 Local,Local Parallel 和 Spark)下的處理。在這篇文章中,你將了解在不同情境之間的變化,並在每個環境下建立邏輯迴歸模型。
環境前提
- 已經建立 HDInsight 上的 R Server
- 相關文章: [Azure|R server] 5分鐘入門:創建Azure HDInsight上的R Server
3種計算環境
- 1.Local Context:將計算上下文重置為本地
rxSetComputeContext('local')
- 2.Local Parallel Context:將計算上下文重置為本地並行。
rxSetComputeContext('localpar')
- 3.Spark Context:將計算上下文重置為 Spark 。
spark <-RxSpark()
rxSetComputeContext(spark)
Local Context:將計算上下文重置為本地
- 看到
rx
在最前面,表示正在使用 ScaleR 函數。
####### Set Local Context #######
rxSetComputeContext('local') #將計算上下文重置為本地
驗證資料是否在 local
####驗證資料是否在local ######
file.exists(system.file("demo.csv",
package="RevoScaleR"))
檢查 Hadoop 、創建新目錄、放資料到新目錄底下
####### Hadoop Command #######
rxHadoopVersion() #檢查 Hadoop 版本
rxHadoopMakeDir("/data/cps/") #在 HDFS 創建新目錄
rxHadoopCopyFromLocal("~/RandomData0410_v1.csv", "/data/cps/") #從 local 端把資料放進去 HDDS 新目錄底下
創建使用HDFS共享目錄data
##要在分布式計算中使用此文件,需要先將其複製到 HDFS ,我們廣放使用 HDFS 共享目錄 data
bigDataDirRoot <- "/data" # HDFS location of the example data
rxHadoopListFiles(bigDataDirRoot, recursive = TRUE)
設置文件路徑,確認正在讀取 HDFS
####### Load demo.csv from Hadoop #######
cpspath <- file.path("/data/cps/demo.csv") #(bigDataDirRoot,/cps/demo.csv)
#使用剛剛複製到 HDFS 的文本文件創建一個 RxTextData 對象。首先,創建一個使用默認值的文件系統對象
hdfsFS <-RxHdfsFileSystem() #設置文件路徑
cpsdata <- RxTextData(cpspath, #trainDS inputDir
fileSystem = hdfsFS,
stringsAsFactors = TRUE) #從CSV文件構建文本對象
rxGetVarInfo(cpsdata) #查看對象的結構
測試迴歸結果
迴歸公式判斷的需為二分類的,ex.factory 這個參數為 A 或 B 的可能,才能放前面
####### Create Logistic Regression Model #######
cpsformula <- "factory ~ model + date + finalError "
model <- rxLogit(formula = cpsformula, data = cpsdata)
summary(model)
Local Parallel Context:將計算上下文重置為本地並行
並在新的上下文中構建邏輯回歸模型。
####### Create Logistic Regression Model Using Local Parallel Context #######
rxSetComputeContext('localpar')
model <- rxLogit(
formula = cpsformula,
data = cpsdata)
summary(model)
Spark Context:將計算上下文重置為 Spark
並在新的上下文中構建邏輯回歸模型。
####### Create Logistic Regression Model Using Spark Context #######
spark <-RxSpark()
rxSetComputeContext(spark)
model <- rxLogit(
formula = cpsformula,
data = cpsdata) #trainDS
summary(model)
Demo 結果比較
Context | Local | Local Parallel | Spark |
---|---|---|---|
Time(s) | 31.984 | 31.368 | 96 |
雖然很明顯在這個情況下 Spark 的運算速度相對其他兩個環境差了有 3 倍,那是因為我 input 的數據檔案不大,不足以顯示 Spark 的優點。所以也並不是當你有數據要分析的時候,就義無反顧的使用 Spark 計算,一定要先衡量數據的量是否稱得上巨量,或是當你發現在 Local 或 Local Parallel 的計算速度已經不滿足你了,你就適合使用看看 Spark 了~以下做了一下整理:
- Local、Local Parallel:適合小數據
- Spark:適合巨量數據
參考資料
- https://datumstudio.jp/blog/連載:azure-hdinsightでr-serverを利用するパフォーマンス測定編
- https://bookdown.org/alizaidi/mrs-spark-ml/modeling-with-microsoft-r-server.html#import-csv-to-xdf
- https://www.blue-granite.com/tutorials/r-server-hdinsight
- https://tsmatz.wordpress.com/2017/02/01/microsoft-r-open-microsoft-r-server-microsoft-r-client/
- https://www.azure.cn/zh-cn/blog/2017/07/14/UseMicrosoftRServerforMachineLearingandModelPublishingII