r - 唯一值的数量 sparklyr

标签 r apache-spark dplyr apache-spark-sql sparklyr

以下示例描述了如何在不使用 dplyr 和 sparklyr 聚合行的情况下计算不同值的数量。

有没有不破坏命令链的解决方法?

更一般地说,如何在 sparklyr 数据帧上使用类似 sql 的窗口函数。

## generating a data set 

set.seed(.328)
df <- data.frame(
  ids = floor(runif(10, 1, 10)),
  cats = sample(letters[1:3], 10, replace = TRUE),
  vals = rnorm(10)
)



## copying to Spark

df.spark <- copy_to(sc, df, "df_spark", overwrite = TRUE)

# Source:   table<df_spark> [?? x 3]
# Database: spark_connection
#   ids  cats       vals
# <dbl> <chr>      <dbl>
#  9     a      0.7635935
#  3     a     -0.7990092
#  4     a     -1.1476570
#  6     c     -0.2894616
#  9     b     -0.2992151
#  2     c     -0.4115108
#  9     b      0.2522234
#  9     c     -0.8919211
#  6     c      0.4356833
#  6     b     -1.2375384
# # ... with more rows

# using the regular dataframe 

df %>% mutate(n_ids = n_distinct(ids))

# ids cats       vals n_ids
# 9    a  0.7635935     5
# 3    a -0.7990092     5
# 4    a -1.1476570     5
# 6    c -0.2894616     5
# 9    b -0.2992151     5
# 2    c -0.4115108     5
# 9    b  0.2522234     5
# 9    c -0.8919211     5
# 6    c  0.4356833     5
# 6    b -1.2375384     5


# using the sparklyr data frame 

df.spark %>% mutate(n_ids = n_distinct(ids))

Error: Window function `distinct()` is not supported by this database

最佳答案

这里最好的方法是单独计算计数,或者使用 countdistinct:

n_ids <- df.spark %>% 
   select(ids) %>% distinct() %>% count() %>% collect() %>%
   unlist %>% as.vector

df.spark %>% mutate(n_ids = n_ids)

approx_count_distinct:

n_ids_approx <- df.spark %>% 
   select(ids) %>% summarise(approx_count_distinct(ids)) %>% collect() %>%
   unlist %>% as.vector

df.spark %>% mutate(n_ids = n_ids_approx)

这有点冗长,但如果您想使用全局无界框架,dplyr 使用的窗口函数方法无论如何都是死胡同。

如果您想要准确的结果,您还可以:

df.spark %>% 
    spark_dataframe() %>% 
    invoke("selectExpr", list("COUNT(DISTINCT ids) as cnt_unique_ids")) %>% 
    sdf_register()

关于r - 唯一值的数量 sparklyr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49538717/

相关文章:

r - 使用 Fread 读取带有双引号和逗号的字段时出错

R 中的重复测量/受试者内方差分析

postgresql - 为什么连续读取的计数结果不同?

r - 如何在 purrr map 中传递数据帧和不均匀向量作为参数

r - df 中的价格返回计算,其中包含许多带有 dplyr 的代码

r - 使用 Shiny 的 navbarPage 更改 sidebarPanel

r - 如何从 R 在 PostgreSQL 中编写表?

scala - Spark Scala 2.10 元组限制

apache-spark - 使用自定义内核数和内存大小运行 Spark 应用程序

r - R 中的波浪号 (~.)