如何用spark.lapply並行化R代碼

學習如何使用spark.lapply並行化R代碼。

寫的亞當Pavlacka

最後發布日期:2022年5月20日

R代碼的並行化是很困難的,因為R代碼運行在驅動程序上,而R數據幀不是分布式的。通常,現有的R代碼在本地運行,並被轉換為在Apache Spark上運行。在其他情況下,一些用於高級統計分析和機器學習技術的SparkR函數可能不支持分布式計算。在這種情況下,可以使用SparkR UDF API在集群中分配所需的工作負載。

示例用例:您希望在相同的數據上訓練多個機器學習模型,例如用於超參數調優。如果數據集適合每個工作人員,那麼使用SparkR UDF API一次訓練模型的多個版本可能會更有效。

spark.lapplyFunction允許您通過在元素列表上運行函數,在多個worker上執行相同的任務。對於列表中的每個元素:

  1. 將函數發送給一個worker。
  2. 執行函數。
  3. 將所有工人的結果作為列表返回給驅動程序。

在下麵的例子中,支持向量機模型適合於虹膜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)})
刪除

信息

必須在所有worker上安裝包。

這篇文章有用嗎?