当前位置: 首页 > 知识库问答 >
问题:

Spark数据帧中的不同记录计数

岳时铭
2023-03-14

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

共有1个答案

白学
2023-03-14

下面是您正在寻找的代码

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>
 类似资料:
  • 对熊猫来说显然是新鲜事物。如何简单地计算数据帧中的记录数。 我本以为像这样简单的东西就能做到,但我似乎甚至在搜索中都找不到答案...可能是因为它太简单了。 上面的代码实际上只是打印整个df

  • 假设我有以下数据帧: 我想计算每个的不同值的数量。它应产生以下结果: 我该怎么做?

  • 我想编写一个具有重分区的大型数据帧,所以我想计算源数据帧的重分区数。 数据帧/default_blocksize的大小 所以请告诉我如何在spark scala中计算数据帧的大小 提前谢谢。

  • 我有以下格式的Apache Spark数据帧 我想在DataFrame中添加一个新列:PreviousPhaseName。此列应指示同一过程的前一个不同阶段。进程的第一阶段(具有最小ID的阶段)将与前一阶段一样具有。当一个阶段发生两次或两次以上时,第二次(第三次...)事件将具有相同的previousPhaseName,例如: 我不确定如何实施这一点。我的第一个方法是: 创建第二个空数据帧DF2

  • 我正在使用数据帧读取。拼花地板文件,但不是将它们转换为rdd来进行我的正常处理,我想对它们进行处理。 所以我有我的文件: 即使从数据帧转换为RDD,我也会收到以下错误: :26:错误:值zipWithIndex不是组织的成员。阿帕奇。火花sql。一行 任何人都知道如何做我正在尝试做的事情,本质上是尝试获取值和列索引。 我在想这样的事情: 但最后一部分被卡住了,因为不知道如何做zipWithInde

  • 我知道这不是一个人应该在这里做的事情,尽管我不知道否则我怎么能问这个问题。 我的目标是统计有多少行具有相同的第一预测值(购买、维护等),但评级不同。 我的尝试是通过第一列来计算,然后计算我得到的不同评分,这将是非常棒的。 一个重要的假设是,如果两行相同,则它们已被预先擦除。因此,可以找到不同等级的行,但没有相同的行。 在我的示例中,第1行和第3行是相同的,因此其中一行被擦除,没有问题。然而,对于其