[HDInsight|R server] 使用 R 在不同的計算上下文下管理 Hadoop 並構建模型

HDInsight上的 R Server 提供各種計算環境(如 Local,Local Parallel 和 Spark)下的處理。在這篇文章中,你將了解在不同情境之間的變化,並在每個環境下建立邏輯迴歸模型。

環境前提


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:適合巨量數據

參考資料

  1. https://datumstudio.jp/blog/連載:azure-hdinsightでr-serverを利用するパフォーマンス測定編
  2. https://bookdown.org/alizaidi/mrs-spark-ml/modeling-with-microsoft-r-server.html#import-csv-to-xdf
  3. https://www.blue-granite.com/tutorials/r-server-hdinsight
  4. https://tsmatz.wordpress.com/2017/02/01/microsoft-r-open-microsoft-r-server-microsoft-r-client/
  5. https://www.azure.cn/zh-cn/blog/2017/07/14/UseMicrosoftRServerforMachineLearingandModelPublishingII