【发布时间】:2016-10-23 07:13:47
【问题描述】:
edf.select("x").distinct.show() 显示edf DataFrame 的x 列中存在的不同值。
是否有一种有效的方法来显示这些不同值在数据框中出现的次数? (计算每个不同的值)
【问题讨论】:
标签: scala apache-spark
edf.select("x").distinct.show() 显示edf DataFrame 的x 列中存在的不同值。
是否有一种有效的方法来显示这些不同值在数据框中出现的次数? (计算每个不同的值)
【问题讨论】:
标签: scala apache-spark
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
【讨论】:
不借助 sql 函数的另一种选择
df.groupBy('your_column_name').count().show()
show 将打印不同的值及其出现。没有显示的结果将是一个数据框。
【讨论】:
import org.apache.spark.sql.functions.countDistinct
df.groupBy("a").agg(countDistinct("s")).collect()
【讨论】:
如果你使用的是 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"));
【讨论】:
df.select("some_column").distinct.count
【讨论】:
countDistinct