首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sparklyr中计算rowSum

在sparklyr中计算rowSum
EN

Stack Overflow用户
提问于 2017-11-22 16:09:57
回答 2查看 1.3K关注 0票数 1

嗨,我有一个下面的火花数据帧。我想要跨行求和。我在sparklyr中找不到任何与行和等价的函数。我尝试了以下查询,但它对列值求和。

代码语言:javascript
复制
trans1M_20 %>% 
        dplyr::select(trans1M_20_clicks) %>%
        dplyr::select(Small_SubChannel_Clicks_names) %>%
        dplyr::summarise_each(funs(sum))

请注意,Alma_1是Small_Subchannel_Clicks_names。

Alma_1

代码语言:javascript
复制
<dbl>

0               
0               
0               
0               
0               
0               
0               
0               
0               
0

我尝试将多个列聚合到一个单独的列中,并对行进行求和。Small_SubChannel_Clicks_names可以包含n个列名。我想做一些类似的事情:

代码语言:javascript
复制
rowSums(trans1M_20[, Small_SubChannel_Clicks_names,drop=F]) –
EN

回答 2

Stack Overflow用户

发布于 2017-12-20 05:44:35

只要列数较少,您就可以生成并计算表达式:

代码语言:javascript
复制
library(dplyr)
library(rlang)

df <- copy_to(sc, data.frame(x=c(1, 3), y=c(2, 4)))

columns_to_sum <- colnames(df)

df %>% transmute(total = !!parse_expr(paste(columns_to_sum, collapse = " + ")))
代码语言:javascript
复制
# Source:   lazy query [?? x 1]
# Database: spark_connection
  total
  <dbl>
1     3
2     7

不幸的是,这不适用于较大数量的列。有关解决方法,请参阅Efficiently calculate row totals of a wide spark DF

票数 3
EN

Stack Overflow用户

发布于 2017-11-22 22:24:04

有一种方法可以通过使用SQL包来执行您想要的操作,该包允许您将DBI查询发送到Spark表。这不是一个dplyr解决方案,但在其他人提出更"dply-ish“的解决方案之前,它可能会很有用。

您必须在查询中手动包含列名。例如,如果你想得到列"trans1M_20_clicks“和"Small_SubChannel_Clicks_names”的总和,你可以这样做:

代码语言:javascript
复制
resSparkSQL <- DBI::dbSendQuery(sc, "SELECT trans1M_20_clicks + Small_SubChannel_Clicks_names as Total FROM your_table_name_in_spark")

结果是一个DBISparkResultObject,尽管您可以将结果列作为data.frame放入R中

代码语言:javascript
复制
resSparkSQL <- DBI::dbGetQuery(sc, "SELECT trans1M_20_clicks + Small_SubChannel_Clicks_names as Total FROM your_table_name_in_spark")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47429653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档