将sparklyr tbl用于环境并相应地分配数据吗?

问题描述 投票:0回答:1

我是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)))

感谢

r sparklyr
1个回答
0
投票

您可以这样获取一张表(例如“ 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)。它被认为是非常糟糕的编程,将使进一步的步骤复杂化。

© www.soinside.com 2019 - 2024. All rights reserved.