【问题标题】:How to count occurrences of each distinct value for every column in a dataframe?如何计算数据框中每一列的每个不同值的出现次数?
【发布时间】:2016-10-23 07:13:47
【问题描述】:

edf.select("x").distinct.show() 显示edf DataFrame 的x 列中存在的不同值。

是否有一种有效的方法来显示这些不同值在数据框中出现的次数? (计算每个不同的值)

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    countDistinct 可能是首选:

    import org.apache.spark.sql.functions.countDistinct
    
    df.agg(countDistinct("some_column"))
    

    如果速度比准确性更重要,您可能会考虑approx_count_distinct(Spark 1.x 中的approxCountDistinct):

    import org.apache.spark.sql.functions.approx_count_distinct
    
    df.agg(approx_count_distinct("some_column"))
    

    获取值和计数:

    df.groupBy("some_column").count()
    

    在 SQL (spark-sql) 中:

    SELECT COUNT(DISTINCT some_column) FROM df
    

    SELECT approx_count_distinct(some_column) FROM df
    

    【讨论】:

      【解决方案2】:

      粗略地说,它是如何工作的:

      【讨论】:

        【解决方案3】:

        不借助 sql 函数的另一种选择

        df.groupBy('your_column_name').count().show()
        

        show 将打印不同的值及其出现。没有显示的结果将是一个数据框。

        【讨论】:

          【解决方案4】:
          import org.apache.spark.sql.functions.countDistinct
          
          df.groupBy("a").agg(countDistinct("s")).collect()
          

          【讨论】:

          • 你能进一步解释你的答案吗?
          【解决方案5】:

          如果你使用的是 Java,那么import org.apache.spark.sql.functions.countDistinct; 会报错: The import org.apache.spark.sql.functions.countDistinct cannot be resolved

          要在 java 中使用countDistinct,请使用以下格式:

          import org.apache.spark.sql.functions.*;
          import org.apache.spark.sql.*;
          import org.apache.spark.sql.types.*;
          
          df.agg(functions.countDistinct("some_column"));
          

          【讨论】:

            【解决方案6】:
            df.select("some_column").distinct.count
            

            【讨论】:

            • 这是否告诉您每个不同值的计数?我想这会告诉你你有 X 值,而不是 Val1 有 A,Val2 有 B,.. ValX 有 C?
            • 这不是问题的答案。
            • 计算速度太慢,最好使用countDistinct
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-08-21
            • 1970-01-01
            • 1970-01-01
            • 2020-09-12
            • 2011-05-12
            • 2019-03-08
            • 2022-12-03
            相关资源
            最近更新 更多