如何计算数据框中每列的每个不同值的出现次数?

时间:2016-06-21 16:10:22

标签: scala apache-spark

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

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

6 个答案:

答案 0 :(得分:35)

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

答案 1 :(得分:1)

df.select("some_column").distinct.count

答案 2 :(得分:1)

导入org.apache.spark.sql.functions.countDistinct df.groupBy(“ a”)。agg(countDistinct(“ s”))。collect()

答案 3 :(得分:1)

另一个不求助于sql函数的选项

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

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

答案 4 :(得分:0)

如果您使用的是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"));

答案 5 :(得分:0)

大致来说,它是如何工作的:

enter image description here

enter image description here