【问题标题】:Using sparklyr tbl to environment and assigning data accordingly?将 sparklyr tbl 用于环境并相应地分配数据?
【发布时间】:2019-10-01 19:03:17
【问题描述】:

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

谢谢

【问题讨论】:

  • 为什么将数据集称为“连接”?您真正想用文字实现什么目标?
  • 这有点复杂(至少对我来说)。一般来说,我是 Spark 的新手,但我的 Rstudio Rserver 界面中有一个选项卡销售“连接”(在环境和历史旁边,这是 Rstudio 中的标准)。我正在尝试将“连接”选项卡中存在的许多数据集移动到全局环境。
  • 您想将表从 Spark 移动到 R 还是相反?
  • 我需要将数据集从 Spark 移动到 Rserver

标签: r sparklyr


【解决方案1】:

你可以像这样获取一个表(比如“a”):

library(DBI)
a <- dbGetQuery(sc, paste("SELECT * FROM a"))

现在,由于您的 Spark 环境中有很多表,您可以在 lapply 中执行相同操作,将所有表移动到 data.frames 的列表中。

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)。它被认为是非常糟糕的编程,并且会使进一步的步骤变得相当复杂。

【讨论】:

    猜你喜欢
    • 2018-10-26
    • 2020-01-06
    • 2023-03-02
    • 1970-01-01
    • 2020-06-03
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多