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

Leo*_*orn 18 scala apache-spark

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

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

zer*_*323 44

countDistinct 可能是第一选择:

import org.apache.spark.sql.functions.countDistinct

df.agg(countDistinct("some_column"))
Run Code Online (Sandbox Code Playgroud)

如果速度比您可能考虑的精度更重要approx_count_distinct(approxCountDistinct在Spark 1.x中):

import org.apache.spark.sql.functions.approx_count_distinct

df.agg(approx_count_distinct("some_column"))
Run Code Online (Sandbox Code Playgroud)

获得价值和数量:

df.groupBy("some_column").count()
Run Code Online (Sandbox Code Playgroud)

在SQL(spark-sql)中:

SELECT COUNT(DISTINCT some_column) FROM df
Run Code Online (Sandbox Code Playgroud)

SELECT approx_count_distinct(some_column) FROM df
Run Code Online (Sandbox Code Playgroud)


Sau*_*ahu 10

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

在此处输入图片说明

在此处输入图片说明


Ant*_*oni 8

不求助于 sql 函数的另一种选择

df.groupBy('your_column_name').count().show()
Run Code Online (Sandbox Code Playgroud)

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


小智 6

import org.apache.spark.sql.functions.countDistinct

df.groupBy("a").agg(countDistinct("s")).collect()
Run Code Online (Sandbox Code Playgroud)

  • 您能进一步解释一下您的答案是如何工作的吗? (7认同)