大佬教程收集整理的这篇文章主要介绍了如何创建非聚集索引以从 R 中的 SQLite DB 查询和收集数据以进行绘图?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 .csv
文件,其中包含 1.05 亿行和 30 列,我想在 R 闪亮应用程序中查询这些文件以进行绘图。
它包含如下所示的字母数字数据:
#Example data
df<-as.data.frame(percent=as.numeric(rep(c("50","80"),each=5e2)),maskProportion=as.numeric(rep(c("50","80")),each=5e2),dose=runif(1e3),origin=as.factor(rep(c("ABC","DEF"),desTination=as.factor(rep(c("XYZ","GHI"),each=5e2))
)
write.csv(df,"PassengerData.csv")
在终端中,我已将其摄取到 SQLite 数据库中,如下所示:
$ sqlite3 -csv PassengerData.sqlite3 '.import PassengerData.csv df'
来自:
CreaTing an sqlite DB in R from an CSV file: why is the DB file 0KB and contains no tables?
到目前为止一切顺利。
我遇到的问题是在 R 中查询的速度,所以我尝试在终端中索引数据库。
在 sqlite3 中,我尝试按照此链接 https://data.library.virginia.edu/creaTing-a-sqlite-database-for-use-with-r/ 为百分比、掩码比例、来源和目的地创建索引:
$ sqlite3 create index "percent" on PassengerData("percent");
$ sqlite3 create index "origin" on PassengerData("origin");
$ sqlite3 create index "desTination" on PassengerData("desTination");
$ sqlite3 create index "maskProp" on PassengerData("maskProp");
我的磁盘空间用完了,因为每次创建索引时我的数据库似乎都会变大。例如。运行第一个命令后,大小为 20GB。我怎样才能避免这种情况?
我认为问题在于运行 collect()
将数据从 SQL 传输到 R 对您的应用来说太慢了。不清楚在传递给 R 之前如何/是否在 SQL 中处理数据。
需要考虑的几件事:
collect
将数据从远程表(在本例中为 sqlite)传输到 R 内存中。如果您的目标是将数据传输到 R,您可以将 csv 直接读入 R,而不是将其写入 SQL,然后再从 SQL 读入 R。您可以采取一些措施来提高性能:
(1) 只将你需要的数据从 SQL 中读入 R。 先在 SQL 中准备好数据。比如对比以下:
# collect last
local_r_df = remote_sql_df %>%
group_by(origin) %>%
summarise(number = n()) %>%
collect()
# collect first
local_r_df = remote_sql_df %>%
collect() %>%
group_by(origin) %>%
summarise(number = n())
这两者都会产生相同的输出。但是,在第一个示例中,汇总发生在 SQL 中,并且仅将最终结果复制到 R;而在第二个示例中,整个表被复制到 R 中,然后在那里进行汇总。最后收集可能比先收集具有更好的性能,因为它只在 SQL 和 R 之间传输少量数据。
(2) 为您的应用预处理数据。如果您的应用仅检查有限数量方向的数据,则可以对数据进行预处理/预汇总。
例如,假设用户最多可以选择两个维度并收到一个交叉表,那么您可以计算所有双向交叉表并保存它们。这可能比整个数据库小得多。然后在运行时,您的应用程序加载准备好的摘要并向用户显示他们请求的任何摘要。这可能会快得多。
以上是大佬教程为你收集整理的如何创建非聚集索引以从 R 中的 SQLite DB 查询和收集数据以进行绘图?全部内容,希望文章能够帮你解决如何创建非聚集索引以从 R 中的 SQLite DB 查询和收集数据以进行绘图?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。