並行R的代碼是很困難的,因為代碼運行在司機和R data.frames沒有分布。通常,有現有的R是本地運行的代碼轉換為運行在Apache火花。在其他情況下,一些SparkR函數用於先進的統計分析和機器學習技術可能不支持分布式計算。在這種情況下,SparkR UDF API可用於跨集群分發所需的工作量。
示例用例:你想訓練一個機器學習模型在一個數據集的子集,分組的關鍵。如果數據的子集適合的工人,這可能是更有效使用SparkR UDF API來訓練多個模型。
的新聞出版總署和gapplyCollect函數將一個函數應用到每個小組DataFrame火花。為每個組火花DataFrame:
- 收集每一組作為一個R data.frame。
- 給工人和執行的函數。
- 返回結果司機為指定的模式。
在接下來的例子中,一個單獨的支持向量機模型是適合的airquality每個月的數據。產生的輸出是一個data.frame MSE為每個月,有或沒有指定模式。
% r df < createDataFrame (na.omit (airquality))模式< - structType (structField(“月”,“MSE”), structField(“整數”,“數量”))結果<——新聞出版總署(df、c(“月”)、功能(鍵,x){圖書館(e1071) data.frame(月=關鍵,MSE = svm(臭氧~。,x,交叉= 3)tot.MSE美元)},模式)
% r df < createDataFrame (na.omit (airquality)) gapplyCollect (df、c(“月”)、功能(鍵,x){圖書館(e1071) y < data.frame(月=關鍵,mse = svm(臭氧~。,x,交叉= 3)tot.MSE美元)名稱(y) < - c(“月”,“mse”) y})