Scala 如何按列对数据进行分组并计算每组的观察数
我有一个数据框Scala 如何按列对数据进行分组并计算每组的观察数,scala,apache-spark,Scala,Apache Spark,我有一个数据框df,有三列:id,类型和活动 val myData = (Seq(("aa1", "GROUP_A", "10"),("aa1","GROUP_A", "12"),("aa2","GROUP_A", "hy"),("aa2", "GROUP_B", "14"), ("aa3","GROUP_B", "11"),("aa3","GROUP_B","12" ),("aa2", "GROUP_3", "12")) val df = sc.paralleli
df
,有三列:id
,类型
和活动
val myData = (Seq(("aa1", "GROUP_A", "10"),("aa1","GROUP_A", "12"),("aa2","GROUP_A", "hy"),("aa2", "GROUP_B", "14"),
("aa3","GROUP_B", "11"),("aa3","GROUP_B","12" ),("aa2", "GROUP_3", "12"))
val df = sc.parallelize(myData).toDF()
我需要按类型对数据进行分组,然后计算每个id
的活动数。这是预期的结果:
type id count
GROUP_A aa1 2
GROUP_A aa2 1
GROUP_B aa3 3
GROUP_B aa2 1
这就是我所尝试的:
df.groupBy("type","id").count().sort("count").show()
但是,它没有给出正确的结果。我对您的样本数据进行了最低限度的更改,并且它对我有效:
//yours
val myData = (Seq(("aa1", "GROUP_A", "10"),("aa1","GROUP_A", "12"),("aa2","GROUP_A", "hy"),("aa2", "GROUP_B", "14"),("aa3","GROUP_B", "11"),("aa3","GROUP_B","12" ),("aa2", "GROUP_3", "12"))
//mine
//removed the ( at the beginning
//changed GROUP_3 to GROUP_B
//other minor changes so that the resultant group by will look like you desired
val myData = Seq(("aa1", "GROUP_A", "10"),("aa1","GROUP_A", "12"),("aa2","GROUP_A", "12"),("aa3", "GROUP_B", "14"),("aa3","GROUP_B", "11"),("aa3","GROUP_B","12" ),("aa2", "GROUP_B", "12"))
//yours
val df = sc.parallelize(myData).toDF()
//mine
//added in column names
val df = sc.parallelize(myData).toDF("id","type","count")
df.groupBy("type","id").count.show
+-------+---+-----+
| type| id|count|
+-------+---+-----+
|GROUP_A|aa1| 2|
|GROUP_A|aa2| 1|
|GROUP_B|aa2| 1|
|GROUP_B|aa3| 3|
+-------+---+-----+
有什么遗漏吗?您可以在创建数据帧时定义列名
,并对分组数据进行计数。这应该很容易
import sqlContext.implicits._
val myData = Seq(("aa1", "GROUP_A", "10"),
("aa1","GROUP_A", "12"),
("aa2","GROUP_A", "hy"),
("aa2", "GROUP_B", "14"),
("aa3","GROUP_B", "11"),
("aa3","GROUP_B","12" ),
("aa3", "GROUP_B", "12"))
val df = sc.parallelize(myData).toDF("id", "type", "activity")
df.groupBy("type","id").count().sort("count").show()
非常感谢。它应该是toDF(“id”,“type”,“count”)
,因为aa..
是id
。让我检查一下。