Calcular com eficiência o total de linhas de um amplo Spark DF
Eu tenho um amplo quadro de dados de faísca de alguns milhares de colunas em cerca de um milhão de linhas, para o qual gostaria de calcular o total de linhas. Minha solução até agora está abaixo. Eu usei:dplyr - soma de várias colunas usando expressões regulares ehttps://github.com/tidyverse/rlang/issues/116
library(sparklyr)
library(DBI)
library(dplyr)
library(rlang)
sc1 <- spark_connect(master = "local")
wide_df = as.data.frame(matrix(ceiling(runif(2000, 0, 20)), 10, 200))
wide_sdf = sdf_copy_to(sc1, wide_df, overwrite = TRUE, name = "wide_sdf")
col_eqn = paste0(colnames(wide_df), collapse = "+" )
# build up the SQL query and send to spark with DBI
query = paste0("SELECT (",
col_eqn,
") as total FROM wide_sdf")
dbGetQuery(sc1, query)
# Equivalent approach using dplyr instead
col_eqn2 = quo(!! parse_expr(col_eqn))
wide_sdf %>%
transmute("total" := !!col_eqn2) %>%
collect() %>%
as.data.frame()
Os problemas surgem quando o número de colunas é aumentado. No spark SQL, parece ser calculado um elemento por vez, ou seja, (((V1 + V1) + V3) + V4) ...) Isso está causando erros devido à recursão muito alta.
Alguém tem uma abordagem alternativa mais eficiente? Qualquer ajuda seria muito apreciada.