我是spark
的新手,我们假设我在数据库中的“连接”为:
a <- data.frame(a = c(1:3), b = sample(letters, 3), c = rep(1))
b <- data.frame(as = c(1:3), b1 = sample(letters, 3), c2 = rep(2), d = c("KISS", "Scorpion", "Poison"))
c <- data.frame(qn = c(10:20), rj = sample(LETTERS, 11))
我可以使用以下代码进行访问:
conf <- spark_config()
conf$`sparklyr.shell.driver-memory` <- "16G"
conf$`spark.memory.fraction` <- 0.8
conf$`spark.yarn.executor.memoryOverhead` <- "2g"
sc <- spark_connect(master = "", spark_home = "", config = conf, version = "2.3.1")
我可以通过使用将它们移动到我的环境中
tbs <- src_tbls(sc)
data <- lapply(tbs, function(x) tbl(sc, x))
在我的环境中,我希望有3个单独的data.frames或tibbles为'a','b'和'c'。有人对我如何实现这一目标有任何想法吗?我需要执行200多个数据集,这就是为什么我要使用lapply
。
我确实无济于事:
lapply(tbs, function(x) assign(x, tbl(sc,x)))
感谢
您可以这样获取一张表(例如“ a”):
library(DBI)
a <- dbGetQuery(sc, paste("SELECT * FROM a"))
现在,由于Spark环境中有很多表,因此可以在lapply
中执行相同的操作,将所有表移到data.frame
的列表中。
table_names <- src_tbls(sc)
data_list <- lapply(table_names,
function(x) dbGetQuery(sc, paste("SELECT * FROM", x)))
names(data_list) <- table_names
如果您确实真的要从列表中删除列表元素,则可以输入attach(data_list)
。它被认为是非常糟糕的编程,将使进一步的步骤复杂化。