【问题标题】:Why does countDistinct/n_distinct on SparkR column not work?为什么 SparkR 列上的 countDistinct/n_distinct 不起作用?
【发布时间】:2016-08-05 13:54:38
【问题描述】:

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

df$col1
1
2
2
5
6
5

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

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

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

我必须使用 agg 功能吗?我尝试过但失败了,因为它似乎不适用于列。

【问题讨论】:

    标签: r apache-spark count sparkr


    【解决方案1】:

    这是预期的结果。 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
    

    【讨论】:

    • 谢谢!我以为 countDistinct 已经导致了动作,但它只是转换。
    • 其实countDistinct 甚至不是一个转换。即使您在df$col1 上调用它,它也不会绑定到任何特定数据。
    • 是的,你是对的。我的意思是,这只是对行动时数据将要发生的事情的描述。
    • 在某种意义上是的,但它与您可能了解的 RDD API 大不相同。如果您正在寻找等价物,那么 select(df, ...) 将是一个转换,collect 是一个动作,但 countDistinct(df$col1) 只是一个函数,它将使用传递给 select 的任何数据进行评估。
    【解决方案2】:
      > 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))
    

    希望你能得到答案。

    【讨论】:

    • 谢谢,但我在分布式数据集中有一列,而不是向量。
    • 你想在列上应用它吗??
    • 不,我只想将它应用于分布式数据框中的一列:spark.apache.org/docs/latest/sparkr.html
    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 2016-07-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多