嗨,我有一个下面的火花数据帧。我想要跨行求和。我在sparklyr中找不到任何与行和等价的函数。我尝试了以下查询,但它对列值求和。
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
<dbl>
0
0
0
0
0
0
0
0
0
0我尝试将多个列聚合到一个单独的列中,并对行进行求和。Small_SubChannel_Clicks_names可以包含n个列名。我想做一些类似的事情:
rowSums(trans1M_20[, Small_SubChannel_Clicks_names,drop=F]) –发布于 2017-12-20 05:44:35
只要列数较少,您就可以生成并计算表达式:
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 = " + ")))# Source: lazy query [?? x 1]
# Database: spark_connection
total
<dbl>
1 3
2 7不幸的是,这不适用于较大数量的列。有关解决方法,请参阅Efficiently calculate row totals of a wide spark DF。
发布于 2017-11-22 22:24:04
有一种方法可以通过使用SQL包来执行您想要的操作,该包允许您将DBI查询发送到Spark表。这不是一个dplyr解决方案,但在其他人提出更"dply-ish“的解决方案之前,它可能会很有用。
您必须在查询中手动包含列名。例如,如果你想得到列"trans1M_20_clicks“和"Small_SubChannel_Clicks_names”的总和,你可以这样做:
resSparkSQL <- DBI::dbSendQuery(sc, "SELECT trans1M_20_clicks + Small_SubChannel_Clicks_names as Total FROM your_table_name_in_spark")结果是一个DBISparkResultObject,尽管您可以将结果列作为data.frame放入R中
resSparkSQL <- DBI::dbGetQuery(sc, "SELECT trans1M_20_clicks + Small_SubChannel_Clicks_names as Total FROM your_table_name_in_spark")https://stackoverflow.com/questions/47429653
复制相似问题