簡體   English   中英

我應該在使用sparkr時在工作節點上預先安裝cran r包

[英]should I pre-install cran r packages on worker nodes when using sparkr

我想用火花等forecast等使用r包,並滿足以下兩個問題。

  1. 我應該在工作節點上預安裝所有這些軟件包嗎? 但是當我閱讀spark 這個文件的源代碼時,似乎spark會自動壓縮包並通過--jars或--packages將它們分發給worker。 我該怎么做才能使工作人員可以使用依賴項?

  2. 假設我需要在map轉換中使用forecast提供的函數,我該如何導入包。 我是否需要執行以下操作,在map函數中導入包,它是否會進行多次導入: SparkR:::map(rdd, function(x){ library(forecast) then do other staffs })

更新:

在閱讀了更多的源代碼后,似乎可以使用includePackage根據此文件在工作節點上包含包。 所以現在問題變成了我必須手動在節點上預安裝軟件包嗎? 如果這是真的,問題1中描述的--jars和--packages的用例是什么? 如果這是錯的,如何使用--jars和--packages來安裝軟件包?

重復此操作很無聊,但您不應該首先使用內部RDD API 它已在第一個官方SparkR版本中刪除,它根本不適合一般用途。

在新的低級API *准備好之前(參見例如SPARK-12922 SPARK-12919SPARK-12792 )我不會將Spark視為運行普通R代碼的平台。 即使它更改添加本機(Java / Scala)代碼與R包裝器可能是一個更好的選擇。

話雖如此,讓我們從你的問題開始:

  1. RPackageUtils旨在處理使用Spark包創建的包。 它不處理標准R庫。
  2. 是的,您需要在每個節點上安裝軟件包。 來自includePackage docstring:

    假定包安裝在Spark集群中的每個節點上。


*如果您使用Spark 2.0+,您可以使用dapply,gapply和lapply函數。

添加庫與spark 2.0+一起使用。 例如,我在群集的所有節點中添加包預測。 該代碼適用於Spark 2.0+和databricks環境。

schema <- structType(structField("out", "string"))
out <- gapply(
  df,
  c("p", "q"),
  function(key, x) 
  if (!all(c("forecast") %in% (.packages()))){
     if (!require("forecast")) {
        install.packages("forecast", repos ="http://cran.us.r-project.org", INSTALL_opts = c('--no-lock'))
     }
  }  
  #use forecast
  #dataframe out
  data.frame(out = x$column, stringAsFactor = FALSE)
}, 
schema)

一個更好的選擇是通過spark-submit存檔選項傳遞你的本地R包,這意味着你不需要在每個worker中安裝R包,也不要在運行SparkR::dapply時安裝和編譯R包,以便耗費時間。 例如:

Sys.setenv("SPARKR_SUBMIT_ARGS"="--master yarn-client --num-executors 40 --executor-cores 10 --executor-memory 8G --driver-memory 512M --jars /usr/lib/hadoop/lib/hadoop-lzo-0.4.15-cdh5.11.1.jar --files /etc/hive/conf/hive-site.xml --archives /your_R_packages/3.5.zip --files xgboost.model sparkr-shell")

當調用SparkR::dapply函數時,首先讓它調用.libPaths("./3.5.zip/3.5") 您需要注意服務器版本R版本必須與您的zip文件R版本相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM