0

我是一个普通的 R 用户。

对于data.frame看起来像下面的一个,我想计算基本的聚合统计信息;最小值、第一分位数、中位数、第三分位数和最大值。以下代码使用reshape2包并dplyr在常规普通 R 中进行该操作是

library(reshape2)
library(dplyr)
tidy_data <- data.frame( topic1 = rnorm(10^6),
                                                 topic2 = rnorm(10^6),
                                                 topic3 = rnorm(10^6),
                                                 topic4 = rnorm(10^6),
                                                 topic5 = rnorm(10^6))
tidy_data %>% 
    melt(measure.vars = c("topic1","topic2","topic3","topic4","topic5")) %>% 
    group_by(variable) %>%
    summarise( MIN = min(value),
                         Q1 = quantile(value, 0.25),
                            Q2 = median(value),
                            Q3 = quantile(value, 0.75),
                            MAX = max(value))

我想知道如何在分布式数据帧(Spark 的DataFrame对象)上重现这样的操作。我已经sparkR设法计算出每个变量的最大值,但方式不够优雅。有没有办法以一种高效而顺利的方式做到这一点?

我的sparkR代码如下:

system.time({
    print(
        head(
            summarize(topics5, 
                                MAX5 = max(topics5$topic5), 
                                MAX4 = max(topics5$topic4),
                                MAX3 = max(topics5$topic3), 
                                MAX2 = max(topics5$topic2), 
                                MAX1 = max(topics5$topic1)
                                )
            )
        )
    })
4

1 回答 1

2

您可以使用describeSparkR 中的方法生成有关数字列的统计信息。例如:

df <- data.frame(a=rnorm(10), b=rnorm(10))
sdf <- createDataFrame(sqlContext, df)
collect(describe(sdf)).

这应该打印计数、平均值、最大值、最小值等

于 2015-07-19T05:44:30.797 回答