繁体   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