安装R包而不附加文件?

安装R包而不附加文件?,r,databricks,fuse,R,Databricks,Fuse,我正在寻找一种在不允许文件附加的文件系统上安装R包的方法(即,Databricks文件系统/DBFS,可通过FUSE安装) 默认情况下,它看起来像是install.packages() R是否提供了一种无需附加文件即可安装软件包的方法 到目前为止,我的经验如下: foundpkgs: kernlab, /tmp/RtmprBtUFj/downloaded_packages/kernlab_0.9-29.tar.gz files: /tmp/RtmprBtUFj/downloaded_packag

我正在寻找一种在不允许文件附加的文件系统上安装R包的方法(即,Databricks文件系统/DBFS,可通过FUSE安装)

默认情况下,它看起来像是
install.packages()

R是否提供了一种无需附加文件即可安装软件包的方法

到目前为止,我的经验如下:

foundpkgs: kernlab, /tmp/RtmprBtUFj/downloaded_packages/kernlab_0.9-29.tar.gz
files: /tmp/RtmprBtUFj/downloaded_packages/kernlab_0.9-29.tar.gz
* installing *source* package ‘kernlab’ ...
** package ‘kernlab’ successfully unpacked and MD5 sums checked
** using staged installation
** libs
g++ -std=gnu++11 -I"/usr/share/R/include" -DNDEBUG      -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-EkOYxp/r-base-4.0.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c brweight.cpp -o brweight.o
<...snip...>
g++ -std=gnu++11 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o kernlab.so brweight.o ctable.o cweight.o dbreakpt.o dcauchy.o dgpnrm.o dgpstep.o dprecond.o dprsrch.o dspcg.o dtron.o dtrpcg.o dtrqsol.o esa.o expdecayweight.o inductionsort.o init.o kspectrumweight.o lcp.o misc.o msufsort.o solvebqp.o stringk.o stringkernel.o svm.o wkasailcp.o wmsufsort.o -llapack -lblas -lgfortran -lm -lquadmath -L/usr/lib/R/lib -lR
installing to /dbfs/<...snip...>/00LOCK-kernlab/00new/kernlab/libs
** R
Warning in .file_append_ensuring_LFs(outFile, codeFiles) :
  write error during file append
<...snip...>
Warning in .file_append_ensuring_LFs(outFile, codeFiles) :
  write error during file append
Error in .install_package_code_files(".", instdir) : 
  unable to write code files
ERROR: unable to collate and parse R files for package ‘kernlab’
* removing ‘/dbfs/<...snip...>/kernlab’

The downloaded source packages are in
    ‘/tmp/RtmprBtUFj/downloaded_packages’
foundpkgs:kernlab,/tmp/RtmprBtUFj/downloaded_packages/kernlab_0.9-29.tar.gz
文件:/tmp/RtmprBtUFj/downloaded_packages/kernlab_0.9-29.tar.gz
*正在安装*source*包“kernlab”。。。
**包“kernlab”已成功解包并检查MD5总和
**使用分阶段安装
**自由基
g++-std=gnu++11-I“/usr/share/R/include“-DNDEBUG-fpic-g-O2-fdebug前缀map=/build/R-base-EkOYxp/R-base-4.0.4=-fstack protector strong-Wformat-Werror=格式安全性-Wdate-time-D_-FORTIFY_-SOURCE=2-g-c brweight.cpp-o brweight.o
g++-std=gnu++11-shared-L/usr/lib/R/lib-Wl,-b符号函数-Wl,-z,relro-o kernlab.so brweight.o ctable.o cweight.o dbbreakpt.o dcauchy.o dgprm.o dgpstep.o dpresond.o dprsch.o dspcg.o dtron.o dtrpcg.o dtrqsol.o esa.o expdecayweight.o inclusionsort.o init.o kspectrumweight.o lcp.o misc.o msufsort.o solvebqp.o stringk.o stringkernel.o svm.o wkasaailcp.o wmsufsort.o espack-lblas-lgran-lm-lMath-L/usr/lib/R/lib-lR
安装到/dbfs//00LOCK kernlab/00new/kernlab/libs
**R
.file\u append\u LFs(输出文件、代码文件)中的警告:
文件附加期间发生写入错误
.file\u append\u LFs(输出文件、代码文件)中的警告:
文件附加期间发生写入错误
安装程序包代码文件(“.”,instdir)时出错:
无法写入代码文件
错误:无法整理和分析程序包“kernlab”的R文件
*正在删除“/dbfs//kernlab”
下载的源程序包位于中
“/tmp/RtmprBtUFj/downloaded_packages”

如果您需要允许用户使用
install.packages
,那么我的第一个建议不是选项,因为它需要使用辅助功能。我认为,如果你能做到这一点,那么你的评论将是最有意义的:

  • 在lib路径前添加两个目录,顺序如下:

    .libpath(c(“/localfs/”、“/dbfs/”、.libpath())
    
    通过将其前置到现有的
    .libpath()
    ,我们保留了系统库路径中可用的内容。通过将
    /localfs/
    放在第一位,它现在是安装任何软件包的默认位置

  • 通过一些cron作业或作为收尾功能,确保两条路径同步:

    rsync-pr/localfs/*/dbfs/
    
    如果您在系统中具有某种形式的退出前脚本功能,则只需执行一次;如果您不能信任它(可能系统立即关闭和/或超时),则cron作业就足够了(如果不完全)

    这意味着一个包很可能在这两种版本中都可用,但R对此没有问题

    这其中的一个问题是,如果一个较新的安装与以前的安装没有相同的所有文件,请考虑一个由于某种原因(可能很少,但可能)实际减少其占用空间的软件包。为此,您需要使用
    rsync--delete…
    。然而,虽然这很有意义,但我还没有对它进行测试,因此我强烈建议您在信任它之前,在生产过程中不受监督地对它进行测试。(我的意思是,任意shell脚本递归删除文件可能会出现什么问题…)


  • 如果您需要允许用户使用
    install.packages
    ,那么我的第一个建议不是一个选项,因为它需要使用一个辅助功能。如果您能够做到这一点,我认为您的评论演练最有意义:

  • 在lib路径前添加两个目录,顺序如下:

    .libpath(c(“/localfs/”、“/dbfs/”、.libpath())
    
    通过将其前置到现有的
    .libpath()
    ,我们保留了系统库路径中可用的内容。通过将
    /localfs/
    放在第一位,它现在是安装任何软件包的默认位置

  • 通过一些cron作业或作为收尾功能,确保两条路径同步:

    rsync-pr/localfs/*/dbfs/
    
    如果您在系统中具有某种形式的退出前脚本功能,则只需执行一次;如果您不能信任它(可能系统立即关闭和/或超时),则cron作业就足够了(如果不完全)

    这意味着一个包很可能在这两种版本中都可用,但R对此没有问题

    这其中的一个问题是,如果一个较新的安装与以前的安装没有相同的所有文件,请考虑一个由于某种原因(可能很少,但可能)实际减少其占用空间的软件包。为此,您需要使用
    rsync--delete…
    。然而,虽然这很有意义,但我还没有对它进行测试,因此我强烈建议您在信任它之前,在生产过程中不受监督地对它进行测试。(我的意思是,任意shell脚本递归删除文件可能会出现什么问题…)


  • DBFS通常用于存储数据对象,而不是您的可执行文件。为什么您要尝试将R包存储在那里?我同意在那里安装可能不是最好的,但是…是一个答案,它在不同的文件系统上编译/安装,然后将其复制到此DBFS装载上。@crestor因为否则R环境,包括ing用户安装的软件包,在群集重启时被DataRicks清除。很难向我们的内部数据科学用户推销这种DevEx。对@r2evans的同样反应是:我对DevEx很满意,但我的data scientist用户不会。所以你是说,在这个系统上没有其他文件系统可供R使用吗