如何更改sqlite在Ubuntu Linux R上创建etilqs文件的临时文件夹?
我在Ubuntu上的R中运行sqldf,从一个包含千兆字节数据的大表中选择某些ID,这个过程根据inotifywait监控文件更改在/var/tmp下创建临时etilqs文件。然而,my/var/tmp位于一个小磁盘上,这偶尔会导致R出错。我找到了一个关于如何在Windows上更改sqlite的临时文件夹位置的方法,但我不知道如何使它在Linux下工作如何更改sqlite在Ubuntu Linux R上创建etilqs文件的临时文件夹?,r,linux,sqlite,ubuntu,sqldf,R,Linux,Sqlite,Ubuntu,Sqldf,我在Ubuntu上的R中运行sqldf,从一个包含千兆字节数据的大表中选择某些ID,这个过程根据inotifywait监控文件更改在/var/tmp下创建临时etilqs文件。然而,my/var/tmp位于一个小磁盘上,这偶尔会导致R出错。我找到了一个关于如何在Windows上更改sqlite的临时文件夹位置的方法,但我不知道如何使它在Linux下工作 library(sqldf) customer_extr <- sqldf("select b.*, a.year, a.name fro
library(sqldf)
customer_extr <- sqldf("select b.*, a.year, a.name from product as b left join customer as a on a.ID = b.ID", dbname = "/home/userName/customer.db")
当前,检查后未设置临时存储目录
Sys.getenv('temp_store_directory')
export SQLITE_TMPDIR=/mnt/tmp
export TMPDIR=/mnt/tmp
我已验证这已由成功设置
echo $SQLITE_TMPDIR
echo $TMPDIR
在Linux下,
Sys.getenv('SQLITE_TMPDIR')
Sys.getenv('TMPDIR')
在R
但是,我的sqldf步骤仍然将etilqs文件写入/var/tmpdbGetQuery(con, "PRAGMA temp_store = 2")
指示sqlite在内存中保存临时文件。但是,它仍在将etilqs文件写入/var/tmp> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] sqldf_0.4-10 RSQLite_1.1 gsubfn_0.6-6 proto_1.0.0
loaded via a namespace (and not attached):
[1] DBI_0.5-1 memoise_1.0.0 Rcpp_0.12.8 digest_0.6.10 chron_2.3-47
我可以尝试将我的操作系统磁盘升级到一个更大的驱动器,但是没有办法告诉Linux下R中的sqlite在其他地方写临时文件吗?如有任何建议,将不胜感激 您可以让R使用不同的临时目录,它考虑环境变量的几种设置:
edd@max:~$ Rscript -e 'print(tempdir())' # default
[1] "/tmp/RtmpUdPCFL"
edd@max:~$ TMPDIR="." Rscript -e 'print(tempdir())' # overridden
[1] "./RtmpsJk2lP"
edd@max:~$
我们必须查看RSQLite和/或sqldf包的源代码,看看它们是否使用自己的设置,或者从R获取设置。如果是后者,我怀疑至少是sqldf,那么您有办法
但请记住在启动R之前设置TMPDIR(或类似设置)。
basic\u string::resize
不是错误消息<代码>临时存储目录不是环境变量;您可以通过执行查询PRAGMA temp\u store\u目录
来读取它。不管怎样,您想要使用的实际目录是什么?你能从R访问它吗?我运行了PRAGMA temp\u store\u目录,它返回空白。但我无法将其设置为其他值(路径)。我要使用的实际目录位于第二个硬盘驱动器/mnt/tmp上。是的,我可以访问它<当操作系统磁盘空间耗尽,sqldf在/var/tmp中创建了大量临时文件时,发生并停止了代码>基本字符串::resize。这很有效!谢谢我不知道我需要将变量放在R的同一行。当我先导出TMPDIR=。
然后运行R
时,它对我不起作用。出于未知原因,sqldf
仍然使用/var/tmp
保存临时文件。这是一种shell约定。您还可以通过启动时读取的文件设置环境变量,请参阅帮助(启动)
。
> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] sqldf_0.4-10 RSQLite_1.1 gsubfn_0.6-6 proto_1.0.0
loaded via a namespace (and not attached):
[1] DBI_0.5-1 memoise_1.0.0 Rcpp_0.12.8 digest_0.6.10 chron_2.3-47
edd@max:~$ Rscript -e 'print(tempdir())' # default
[1] "/tmp/RtmpUdPCFL"
edd@max:~$ TMPDIR="." Rscript -e 'print(tempdir())' # overridden
[1] "./RtmpsJk2lP"
edd@max:~$