【发布时间】:2020-11-26 14:13:54
【问题描述】:
我有 4 年的 R 使用经验,但我对大数据游戏非常陌生,因为我一直在处理 csv 文件。
从远处操纵大量数据令人兴奋,但也不知何故令人沮丧,因为您习惯于重新设计一些简单的事情。
我现在正在努力的任务是对变量进行基本的 5 位数摘要:
summary(df$X)
一些上下文,我与 impala 连接,这些代码行工作正常:
library(dbplyr)
localTable <- tbl(con, 'serverTable')
localTable %>% tally()
localTable %>% filter(X > 10) %>% tally()
如果我只是写
localTable
相反,RStudio 卡住/需要很多时间,所以我使用任务管理器将其抑制。
回到我当前的问题,我尝试通过以下方式进行 5 位数的摘要:
summary(localTable$X) #returns Length 0, Class NULL, Mode NULL
localTable %>% fivenum(X) #returns Error in rank(x, ties.method = "min", na.last = "keep") : unimplemented type 'list' in 'greater'
还使用 summarise 构建自定义 summary()
localTable %>% summarize(Min = min(X),
Q1 = quantile(X, .25),
Avg = mean(X),
Q3 = quantile(X, .75),
Max = max(X))
返回一个语法错误。
我的猜测是,我的代码和服务器之间以数据结构的形式存在一个非常微不足道的缺失链接,但我无法弄清楚是什么。
我也尝试将 localTable$x 保存到内存变量中
XL <- localTable$X
但我总是得到一个 NULL
在图形方面,使用 dbplot,如果我尝试的话
library(dbplot)
localTable %>% dbplot_histogram(X)
我得到一个空图形。
我曾考虑在 boxplot 函数中使用 5 位数字摘要,可以这么说,ggplotbuild(object)$data,但是使用 dbplot_boxplot 我得到错误找不到函数“dbplot_boxplot”。
我开始使用 dbplyr 是因为我对 dplyr 非常熟悉,并且我不想使用 DBI::dbGetQuery 在 SQL 中编写查询,但是您可以建议其他软件包,如 implyR、sparklyR 等,以及关于和我发现的一样大的主题都是非常基础的。
编辑:
根据评论中的要求,我添加了结果
str(localTable)
这是
List of 2
$ src:List of 2
..$ con :Formal class 'Impala' [package ".GlobalEnv"] with 4 slots
.. .. ..@ ptr :<externalptr>
.. .. ..@ quote : chr "`"
.. .. ..@ info :List of 15
.. .. .. ..$ dbname : chr "IMPALA"
.. .. .. ..$ dbms.name : chr "Impala"
.. .. .. ..$ db.version : chr "2.9.0-cdh5.12.1"
.. .. .. ..$ username : chr "User"
.. .. .. ..$ host : chr ""
.. .. .. ..$ port : chr ""
.. .. .. ..$ sourcename : chr "impala connector"
.. .. .. ..$ servername : chr "Impala"
.. .. .. ..$ drivername : chr "Cloudera ODBC Driver for Impala"
.. .. .. ..$ odbc.version : chr "03.80.0000"
.. .. .. ..$ driver.version : chr "2.6.11.1011"
.. .. .. ..$ odbcdriver.version : chr "03.80"
.. .. .. ..$ supports.transactions : logi FALSE
.. .. .. ..$ getdata.extensions.any_column: logi TRUE
.. .. .. ..$ getdata.extensions.any_order : logi TRUE
.. .. .. ..- attr(*, "class")= chr [1:3] "Impala" "driver_info" "list"
.. .. ..@ encoding: chr ""
..$ disco: NULL
..- attr(*, "class")= chr [1:4] "src_Impala" "src_dbi" "src_sql" "src"
$ ops:List of 2
..$ x : 'ident' chr "serverTable"
..$ vars: chr [1:157] "X" ...
..- attr(*, "class")= chr [1:3] "op_base_remote" "op_base" "op"
- attr(*, "class")= chr [1:5] "tbl_Impala" "tbl_dbi" "tbl_sql" "tbl_lazy" ...
不确定我是否可以输入我的表格,因为它是敏感信息
【问题讨论】:
-
嗨@goingdeep,看起来查询没有根据
summary中的Length 0,返回任何结果?我猜你也不能运行str(localTable)? -
hello
str(localTable)输出 2 个列表,如果我展开它,我在 RStudio 的环境选项卡中看到的相同 -
您可以在您的问题中添加
str(localTable)的结果吗?在问题中显示dput(head(localTable,10))以提供前十行数据的样本也可能会有所帮助? -
我补充说
localTable %>% summarize(mean = mean(x))工作正常(虽然na.rm = TRUE不能) -
那么您访问的是哪个子列表?基于
str输出,我不明白localTable %>% summarize(mean = mean(x))如何提供任何输出,因为localTable$x不是变量?另外,您在问题中引用了X和x?