Spark数据框中的不同记录数

Posted

技术标签:

【中文标题】Spark数据框中的不同记录数【英文标题】:Distinct Record Count in Spark dataframe 【发布时间】:2018-05-03 21:04:47 【问题描述】:

我正在尝试在 spark 数据框中显示几个不同列的不同计数,以及对第一列进行分组后的记录计数。 因此,如果我有 col1、col2 和 col3,我想按 col1 分组,然后显示 col2 的不同计数和 col3 的不同计数。 然后,我想在 col1 的同一 groupBy 之后显示记录数。 最后,在一个 agg 语句中完成这一切。 有什么想法吗?

【问题讨论】:

Spark DataFrame: count distinct values of every column的可能重复 【参考方案1】:

下面是你要找的代码

df.groupBy("COL1").agg(countDistinct("COL2"),countDistinct("COL3"),count($"*")).show

=======下面测试============

scala>  val lst = List(("a","x","d"),("b","D","s"),("ss","kk","ll"),("a","y","e"),("b","c","y"),("a","x","y"));
lst: List[(String, String, String)] = List((a,x,d), (b,D,s), (ss,kk,ll), (a,y,e), (b,c,y), (a,x,y))

scala> val rdd=sc.makeRDD(lst);
rdd: org.apache.spark.rdd.RDD[(String, String, String)] = ParallelCollectionRDD[7] at makeRDD at <console>:26

scala> val df = rdd.toDF("COL1","COL2","COL3");
df: org.apache.spark.sql.DataFrame = [COL1: string, COL2: string ... 1 more field]

scala> df.printSchema
root
 |-- COL1: string (nullable = true)
 |-- COL2: string (nullable = true)
 |-- COL3: string (nullable = true)


scala> df.groupBy("COL1").agg(countDistinct("COL2"),countDistinct("COL3"),count($"*")).show
+----+--------------------+--------------------+--------+
|COL1|count(DISTINCT COL2)|count(DISTINCT COL3)|count(1)|
+----+--------------------+--------------------+--------+
|  ss|                   1|                   1|       1|
|   b|                   2|                   2|       2|
|   a|                   2|                   3|       3|
+----+--------------------+--------------------+--------+


scala>

【讨论】:

感谢您的回复。你能解释一下 count($"*") 是如何对第一列进行分组后的记录计数的吗? 另外,当我执行 countDistincts 时,不同计数全部为 1 是否有原因? Count($””) 表示只是 count() 就像在 Oracle 等其他 rdbms sql 中一样,这意味着 count all .. 它计算组内的所有记录 count($"") , count("") 或 count("COL1") 这三个都将产生相同的结果.. 基本上计算一个组中的所有行

以上是关于Spark数据框中的不同记录数的主要内容,如果未能解决你的问题,请参考以下文章

为spark scala中的数据框中的每个组采样不同数量的随机行

如何在 PySpark 中的大型 Spark 数据框中对行的每个子集进行映射操作

为pyspark数据框中的记录间隔分配一个常数值

如何在Spark Scala中以CSV格式编写不同的布局

Pyspark - 基于数据框中的 2 列的不同记录

计算 pyspark 数据框中的聚类成本