r - 将 sparklyr tbl 用于环境并相应地分配数据?
问题描述
我是新手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 环境中有很多表,您可以在 an 中执行相同操作lapply
,将所有表移动到data.frame
s 列表中。
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)
. 它被认为是非常糟糕的编程,并且会使进一步的步骤变得相当复杂。
推荐阅读
- python - 如何在 Xcode 构建阶段使用 3rd 方包运行 Python 脚本
- elasticsearch - AWS 弹性搜索聚合
- django - Angular应用一直说消息不存在
- reactjs - React Hook Form:isDirty 在负载上不起作用
- python - 使用 python 配置 mongodb 时 SSL 证书验证失败
- python - 如何使用嵌套的 for 循环解决 numba 降低错误?
- maven - Dspace 安装在内核失败
- flask - 无法使用 boto3 和烧瓶上传到 s3
- javascript - 如何在 ng-bootstrap 上使用 NgNav 渲染可滚动的垂直导航?
- javascript - 打字稿:是否可以只为导出类型中的一个键设置状态?