为什么 SparkR 列上的 countDistinct/n_distinct 不起作用?

Why does countDistinct/n_distinct on SparkR column not work?

我想计算(SparkR 数据帧的)SparkR 列的不同元素:

df$col1
1
2
2
5
6
5

不同的元素:1,2,5,6

当我在我的 SparkR 列上尝试 countDistinct 时,我只得到这个结果:

> countDistinct(df$col1)
Column count(col1)

我必须使用 agg 函数吗?我试过但失败了,因为它似乎不适用于 Columns。

  > df <- c(1,2,3,4,5,6,7,4,5,6)
   > df_uniq <- unique(df)
   > length(df_uniq)
    [1] 7

找出 df 中各列的唯一值

unique(df$col1)
length(unique(df$col1))

希望您能得到答案。

这是预期的结果。 SparkR 列不是数据容器。它只是执行计划中逻辑操作的一种表示。如果你得到一个结果,你已经在特定的上下文中对其进行了评估:

# 2.0.0+ syntax
df <- createDataFrame(data.frame(col1=c(1, 2, 2, 5, 6, 5)))

collect(select(df, countDistinct(df$col1)))
##   count(DISTINCT col1)                                        
## 1                    4