如何使用SPARKYR汇总分类变量级别

如何使用SPARKYR汇总分类变量级别,r,apache-spark,dplyr,sparklyr,R,Apache Spark,Dplyr,Sparklyr,对于数据集中的每个分类变量,我希望获得每个级别的计数和汇总统计数据。我可以使用他们的diagnose\u category()函数来实现这一点。因为在工作中我没有那个包,所以我使用dplyr重新创建了这个函数 在Sparkye中,我可以一次获得单个变量的计数。需要帮助来扩展所有分类变量 需要帮助: 通过SparklyR实现该功能 表1:所需的最终输出: #一个tible:20x6 变量级别N频率比秩 1切理想53940 21551 40.0 1 2减特优53940 13791 25.6 2 3切

对于数据集中的每个分类变量,我希望获得每个级别的计数和汇总统计数据。我可以使用他们的
diagnose\u category()
函数来实现这一点。因为在工作中我没有那个包,所以我使用dplyr重新创建了这个函数

在Sparkye中,我可以一次获得单个变量的计数。需要帮助来扩展所有分类变量

需要帮助:

通过SparklyR实现该功能

表1:所需的最终输出:

#一个tible:20x6
变量级别N频率比秩
1切理想53940 21551 40.0 1
2减特优53940 13791 25.6 2
3切割非常好53940 12082 22.4 3
4切割良好53940 4906 9.10 4
5切公平53940 1610 2.98 5
6色G 53940 11292 20.9 1
7色E 53940 9797 18.2 2
8色F 53940 9542 17.7 3
9色H 53940 8304 15.4 4
10色D 53940 6775 12.6 5
11颜色I 53940 5422 10.1 6
12彩色J 53940 2808 5.21 7
13清晰度SI1 53940 13065 24.2 1
14清晰度VS2 53940 12258 22.7 2
15清晰度SI2 53940 9194 17.0 3
16清晰度VS1 53940 8171 15.1 4
17清晰度VVS2 53940 5066 9.39 5
18清晰度VVS1 53940 3655 6.78 6
19如果53940 1790 3.32 7
20清晰度I1 53940 741 1.37 8
R代码:

#分类变量配置文件
#基于dlookr包的表,diagnose_category()函数
#变量:变量名
#类型:变量的数据类型
#级别:级别名称
#N:观察次数
#freq:该级别的观察次数
#比率:一级观察的百分比
#等级:各层的入住率等级
图书馆(GG2)
图书馆(dplyr)
图书馆(tidyr)
图书馆(purrr)
图书馆(tibble)
图书馆(stringr)
#辅助函数
类别级别汇总%
转换(级别=x,N=总和(N),频率=N,
比率=n/总和(n)*100,秩=行数()
}  
#装载
钻石%
映射(~cat_level_summary(data.frame(x=.x),x))%>%
do.call(rbind.data.frame),%%>%
行名到列(,“变量”)%>%
突变(变量=str\u匹配(变量,“.*(=\\)”)[,1])
火花代码:

火花数据表 钻石% 汇总(计数=n())%>% sdf_寄存器(“分类变量配置文件”) 使用以下方法展平数据:

最后应用所需的窗口功能:

result <- counts %>%
  arrange(-freq) %>% 
  mutate(
    rank = rank(),
    total = sum(freq, na.rm = TRUE),
    ratio = freq / total * 100)
#来源:spark[?x 6]
#组:变量
#订购人:-freq
可变级别频率等级总比率
1切理想215515394040.0
2减价特价13791 2 53940 25.6
3切割非常好12082 3 53940 22.4
4切割良好4906 4 53940 9.10
5切公平161053940 2.98
6清晰度SI1 13065 1 53940 24.2
7清晰度VS2 12258 2 53940 22.7
8清晰度SI2 9194 3 53940 17.0
9清晰度VS1 8171 4 53940 15.1
10清晰度VVS2 5066 5 53940 9.39
#…行数更多
有以下几点


org.apache.spark.sql.catalyst.plans.logical.Project
项目[变量#524,级别#525,频率#1478L,等级#1479,总数#1480L,((铸造(频率#1478L为双倍)/铸造(总计#1480L为双倍))*100.0)作为比率#1481]
+-Window[rank(_w1#1493L)windowspecdefinition(变量#524,_w1#1493L ASC NULLS FIRST,将dwindowframe(RowFrame,unbounddpreceiding$(),currentrow$)指定为rank#1479],[variable#524],_w1#1493L ASC NULLS FIRST]
+-Window[总和(频率1478L)windowspecdefinition(变量#524,指定的dwindowFrame(行框,无界接收$(),无界跟随$())作为总计#1480L],[变量#524]
+-项目[变量524,级别525,频率1478L,-频率1478L为1493L]
+-排序[-freq#1478L ASC NULL FIRST],真
+-聚合[变量524,级别525],[变量524,级别525,计数(1)为频率1478L]
+-生成分解(贴图(切割,切割19,颜色,颜色20,清晰度,清晰度21)),[0,1,2],假,[变量524,级别525]
+-项目[剪裁19,颜色20,清晰度21]
+-内存相关[carat#18,cut#19,color#20,clarity#21,depth#22,table#23,price#24,x#25,y#26,z#27],存储级别(磁盘,内存,反序列化,1个副本)
+-扫描现有RDD[carat 18,cut 19,color 20,clarity 21,depth 22,table 23,price 24,x 25,y 26,z 27]
和查询(
sdf\u聚集
不包括组件):

选择'variable','level','freq','rank','total','freq`/'total`*100.0作为'ratio'`
从(选择'variable','level','freq',rank()除以(按'variable'划分,按-freq'排序)作为'rank',和('freq')除以(按'variable'划分)作为'total'`
从(选择*
从(选择'variable','level',count(*)作为'freq`
来自'Sparkyr_tmp_ded2576b9f1`
按“变量”、“级别”分组)`dsbksdfhtf`
订单编号-`freq``obyrzsxeus``ekejqyjrfz`
counts <- long %>% group_by(variable, level) %>% summarise(freq = n())
result <- counts %>%
  arrange(-freq) %>% 
  mutate(
    rank = rank(),
    total = sum(freq, na.rm = TRUE),
    ratio = freq / total * 100)
result
optimizedPlan(result)
dbplyr::remote_query(result)