2017-11-22 6 views
0

こんにちは私は、次のスパークのデータフレームを持っています。私は行全体を合計したい。私はsparklyrの行合計と同等の関数を見つけることができませんでした。私は次のクエリを試みたが、列の値を合計します。sparklyrのrowSumを計算する

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 

私は1つの列に複数の列を集約しようと行を合計しています。 Small_SubChannel_Clicks_namesには、n個の列名を含めることができます。

rowSums(trans1M_20[, Small_SubChannel_Clicks_names,drop=F]) – 

答えて

1

あなたがあなたのスパークテーブルにSQLクエリを送信することができますDBIパッケージを、使用によって、欲しいものを行う方法があります:私のような何かをしたいです。それはdplyrソリューションではありませんが、他の誰かがより "ディフリー・アイ"のソリューションを提供するまでは、とにかく便利かもしれません。

クエリに手動で列名を含める必要があります。たとえば、あなたが列「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") 

あなたがRに結果列を得ることができるが、結果は、DBISparkResultObjectです

resSparkSQL <- DBI::dbGetQuery(sc, "SELECT trans1M_20_clicks + Small_SubChannel_Clicks_names as Total FROM your_table_name_in_spark") 
+0

「Small_SubChannel_Clicks_namesには任意の数の列を含めることができます」とはどういう意味ですか? 'dplyr :: select(Small_SubChannel_Clicks_names)'を使うと、その列だけが選択されます。 –

+0

Small_SubChannel_Click_namesには複数の列の名前が含まれていますので、select文でこれを使用したので、これらの列のサブセットを取得しません。これらを1つの列にマージしません。 – Mustufain

+0

さて、私は答えを編集しました。私はこれが助けてくれることを願っています。 –

2

限り、列の数が少ないとあなただけの式を生成し、評価することができます:data.frameとして

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を参照してください。

関連する問題