R代碼的並行化是很困難的,因為R代碼運行在驅動程序上,而R數據幀不是分布式的。通常,現有的R代碼在本地運行,並被轉換為在Apache Spark上運行。在其他情況下,一些用於高級統計分析和機器學習技術的SparkR函數可能不支持分布式計算。在這種情況下,可以使用SparkR UDF API在集群中分配所需的工作負載。
示例用例:您希望在相同的數據上訓練多個機器學習模型,例如用於超參數調優。如果數據集適合每個工作人員,那麼使用SparkR UDF API一次訓練模型的多個版本可能會更有效。
的spark.lapplyFunction允許您通過在元素列表上運行函數,在多個worker上執行相同的任務。對於列表中的每個元素:
- 將函數發送給一個worker。
- 執行函數。
- 將所有工人的結果作為列表返回給驅動程序。
在下麵的例子中,支持向量機模型適合於虹膜3倍交叉驗證的數據集,而成本從0.5到1,增量為0.1。輸出是一個包含各種成本參數的模型摘要的列表。
%r library(SparkR) spark.lapply(seq(0.5, 1, by = 0.1), function(x) {library(e1071) model <- svm(Species ~ ., iris, cost = x, cross = 3) summary(model)})